GWT backend for libGDX enabling Java game development for web browsers through JavaScript compilation
—
The GWT backend provides WebGL-based graphics rendering with full OpenGL ES 2.0 and 3.0 compatibility. The graphics system handles canvas management, WebGL context creation, and provides browser-optimized implementations of libGDX graphics interfaces.
public class GwtGraphics extends AbstractGraphics {
// Display information
public int getWidth();
public int getHeight();
public int getBackBufferWidth();
public int getBackBufferHeight();
public float getBackBufferScale();
public int getSafeInsetLeft();
public int getSafeInsetTop();
public int getSafeInsetBottom();
public int getSafeInsetRight();
// Frame timing
public float getDeltaTime();
public float getRawDeltaTime();
public int getFramesPerSecond();
public GraphicsType getType(); // Returns GraphicsType.WebGL
public float getPpiX();
public float getPpiY();
public float getPpcX();
public float getPpcY();
public float getDensity();
// Display modes (limited in browsers)
public boolean supportsDisplayModeChange();
public DisplayMode[] getDisplayModes();
public DisplayMode getDisplayMode();
public boolean setFullscreenMode(DisplayMode displayMode);
public boolean setWindowedMode(int width, int height);
// V-Sync (no-op in browsers)
public void setVSync(boolean vsync);
public BufferFormat getBufferFormat();
public boolean supportsExtension(String extension);
// OpenGL context
public GL20 getGL20();
public GL30 getGL30();
public void setGL20(GL20 gl20);
public void setGL30(GL30 gl30);
// Window management (web-specific)
public void setTitle(String title);
public void setUndecorated(boolean undecorated);
public void setResizable(boolean resizable);
public void setSystemCursor(Cursor.SystemCursor systemCursor);
public void setCursor(Cursor cursor);
// Monitor and display information
public Monitor getPrimaryMonitor();
public Monitor getMonitor();
public Monitor[] getMonitors();
public DisplayMode[] getDisplayModes(Monitor monitor);
public DisplayMode getDisplayMode(Monitor monitor);
// Screenshot capability
public void requestRendering();
public boolean isFullscreen();
// Cursor creation
public Cursor newCursor(Pixmap pixmap, int xHotspot, int yHotspot);
}public class GwtGL20 implements GL20 {
// All standard GL20 methods
public void glActiveTexture(int texture);
public void glAttachShader(int program, int shader);
public void glBindAttribLocation(int program, int index, String name);
public void glBindBuffer(int target, int buffer);
public void glBindFramebuffer(int target, int framebuffer);
public void glBindRenderbuffer(int target, int renderbuffer);
public void glBindTexture(int target, int texture);
public void glBlendColor(float red, float green, float blue, float alpha);
public void glBlendEquation(int mode);
public void glBlendEquationSeparate(int modeRGB, int modeAlpha);
public void glBlendFunc(int sfactor, int dfactor);
public void glBlendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha);
public void glBufferData(int target, int size, Buffer data, int usage);
public void glBufferSubData(int target, int offset, int size, Buffer data);
public int glCheckFramebufferStatus(int target);
public void glClear(int mask);
public void glClearColor(float red, float green, float blue, float alpha);
public void glClearDepthf(float depth);
public void glClearStencil(int s);
public void glColorMask(boolean red, boolean green, boolean blue, boolean alpha);
public void glCompileShader(int shader);
public void glCompressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, int imageSize, Buffer data);
public void glCompressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int imageSize, Buffer data);
public void glCopyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border);
public void glCopyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
public int glCreateProgram();
public int glCreateShader(int type);
public void glCullFace(int mode);
public void glDeleteBuffers(int n, IntBuffer buffers);
public void glDeleteBuffer(int buffer);
public void glDeleteFramebuffers(int n, IntBuffer framebuffers);
public void glDeleteFramebuffer(int framebuffer);
public void glDeleteProgram(int program);
public void glDeleteRenderbuffers(int n, IntBuffer renderbuffers);
public void glDeleteRenderbuffer(int renderbuffer);
public void glDeleteShader(int shader);
public void glDeleteTextures(int n, IntBuffer textures);
public void glDeleteTexture(int texture);
public void glDepthFunc(int func);
public void glDepthMask(boolean flag);
public void glDepthRangef(float zNear, float zFar);
public void glDetachShader(int program, int shader);
public void glDisable(int cap);
public void glDisableVertexAttribArray(int index);
public void glDrawArrays(int mode, int first, int count);
public void glDrawElements(int mode, int count, int type, Buffer indices);
public void glEnable(int cap);
public void glEnableVertexAttribArray(int index);
public void glFinish();
public void glFlush();
public void glFramebufferRenderbuffer(int target, int attachment, int renderbuffertarget, int renderbuffer);
public void glFramebufferTexture2D(int target, int attachment, int textarget, int texture, int level);
public void glFrontFace(int mode);
public void glGenBuffers(int n, IntBuffer buffers);
public int glGenBuffer();
public void glGenerateMipmap(int target);
public void glGenFramebuffers(int n, IntBuffer framebuffers);
public int glGenFramebuffer();
public void glGenRenderbuffers(int n, IntBuffer renderbuffers);
public int glGenRenderbuffer();
public void glGenTextures(int n, IntBuffer textures);
public int glGenTexture();
public String glGetActiveAttrib(int program, int index, IntBuffer size, IntBuffer type);
public String glGetActiveUniform(int program, int index, IntBuffer size, IntBuffer type);
public void glGetAttachedShaders(int program, int maxcount, Buffer count, IntBuffer shaders);
public int glGetAttribLocation(int program, String name);
public void glGetBooleanv(int pname, Buffer params);
public void glGetBufferParameteriv(int target, int pname, IntBuffer params);
public int glGetError();
public void glGetFloatv(int pname, FloatBuffer params);
public void glGetFramebufferAttachmentParameteriv(int target, int attachment, int pname, IntBuffer params);
public void glGetIntegerv(int pname, IntBuffer params);
public String glGetProgramInfoLog(int program);
public void glGetProgramiv(int program, int pname, IntBuffer params);
public void glGetRenderbufferParameteriv(int target, int pname, IntBuffer params);
public String glGetShaderInfoLog(int shader);
public void glGetShaderiv(int shader, int pname, IntBuffer params);
public void glGetShaderPrecisionFormat(int shadertype, int precisiontype, IntBuffer range, IntBuffer precision);
public void glGetShaderSource(int shader, int bufsize, Buffer length, String source);
public String glGetString(int name);
public void glGetTexParameterfv(int target, int pname, FloatBuffer params);
public void glGetTexParameteriv(int target, int pname, IntBuffer params);
public int glGetUniformLocation(int program, String name);
public void glGetUniformfv(int program, int location, FloatBuffer params);
public void glGetUniformiv(int program, int location, IntBuffer params);
public void glGetVertexAttribfv(int index, int pname, FloatBuffer params);
public void glGetVertexAttribiv(int index, int pname, IntBuffer params);
public void glGetVertexAttribPointerv(int index, int pname, Buffer pointer);
public void glHint(int target, int mode);
public boolean glIsBuffer(int buffer);
public boolean glIsEnabled(int cap);
public boolean glIsFramebuffer(int framebuffer);
public boolean glIsProgram(int program);
public boolean glIsRenderbuffer(int renderbuffer);
public boolean glIsShader(int shader);
public boolean glIsTexture(int texture);
public void glLineWidth(float width);
public void glLinkProgram(int program);
public void glPixelStorei(int pname, int param);
public void glPolygonOffset(float factor, float units);
public void glReadPixels(int x, int y, int width, int height, int format, int type, Buffer pixels);
public void glReleaseShaderCompiler();
public void glRenderbufferStorage(int target, int internalformat, int width, int height);
public void glSampleCoverage(float value, boolean invert);
public void glScissor(int x, int y, int width, int height);
public void glShaderBinary(int n, IntBuffer shaders, int binaryformat, Buffer binary, int length);
public void glShaderSource(int shader, String string);
public void glStencilFunc(int func, int ref, int mask);
public void glStencilFuncSeparate(int face, int func, int ref, int mask);
public void glStencilMask(int mask);
public void glStencilMaskSeparate(int face, int mask);
public void glStencilOp(int fail, int zfail, int zpass);
public void glStencilOpSeparate(int face, int fail, int zfail, int zpass);
public void glTexImage2D(int target, int level, int internalformat, int width, int height, int border, int format, int type, Buffer pixels);
public void glTexParameterf(int target, int pname, float param);
public void glTexParameterfv(int target, int pname, FloatBuffer params);
public void glTexParameteri(int target, int pname, int param);
public void glTexParameteriv(int target, int pname, IntBuffer params);
public void glTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, Buffer pixels);
public void glUniform1f(int location, float x);
public void glUniform1fv(int location, int count, FloatBuffer v);
public void glUniform1fv(int location, int count, float[] v, int offset);
public void glUniform1i(int location, int x);
public void glUniform1iv(int location, int count, IntBuffer v);
public void glUniform1iv(int location, int count, int[] v, int offset);
public void glUniform2f(int location, float x, float y);
public void glUniform2fv(int location, int count, FloatBuffer v);
public void glUniform2fv(int location, int count, float[] v, int offset);
public void glUniform2i(int location, int x, int y);
public void glUniform2iv(int location, int count, IntBuffer v);
public void glUniform2iv(int location, int count, int[] v, int offset);
public void glUniform3f(int location, float x, float y, float z);
public void glUniform3fv(int location, int count, FloatBuffer v);
public void glUniform3fv(int location, int count, float[] v, int offset);
public void glUniform3i(int location, int x, int y, int z);
public void glUniform3iv(int location, int count, IntBuffer v);
public void glUniform3iv(int location, int count, int[] v, int offset);
public void glUniform4f(int location, float x, float y, float z, float w);
public void glUniform4fv(int location, int count, FloatBuffer v);
public void glUniform4fv(int location, int count, float[] v, int offset);
public void glUniform4i(int location, int x, int y, int z, int w);
public void glUniform4iv(int location, int count, IntBuffer v);
public void glUniform4iv(int location, int count, int[] v, int offset);
public void glUniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer value);
public void glUniformMatrix2fv(int location, int count, boolean transpose, float[] value, int offset);
public void glUniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer value);
public void glUniformMatrix3fv(int location, int count, boolean transpose, float[] value, int offset);
public void glUniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer value);
public void glUniformMatrix4fv(int location, int count, boolean transpose, float[] value, int offset);
public void glUseProgram(int program);
public void glValidateProgram(int program);
public void glVertexAttrib1f(int indx, float x);
public void glVertexAttrib1fv(int indx, FloatBuffer values);
public void glVertexAttrib2f(int indx, float x, float y);
public void glVertexAttrib2fv(int indx, FloatBuffer values);
public void glVertexAttrib3f(int indx, float x, float y, float z);
public void glVertexAttrib3fv(int indx, FloatBuffer values);
public void glVertexAttrib4f(int indx, float x, float y, float z, float w);
public void glVertexAttrib4fv(int indx, FloatBuffer values);
public void glVertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, Buffer ptr);
public void glVertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, int ptr);
public void glViewport(int x, int y, int width, int height);
}public class GwtGL30 extends GwtGL20 implements GL30 {
// Additional GL30 methods
public void glBeginQuery(int target, int id);
public void glBeginTransformFeedback(int primitiveMode);
public void glBindBufferBase(int target, int index, int buffer);
public void glBindBufferRange(int target, int index, int buffer, int offset, int size);
public void glBindSampler(int unit, int sampler);
public void glBindTransformFeedback(int target, int id);
public void glBindVertexArray(int array);
public void glBlitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter);
public void glClearBufferfi(int buffer, int drawbuffer, float depth, int stencil);
public void glClearBufferfv(int buffer, int drawbuffer, FloatBuffer value);
public void glClearBufferiv(int buffer, int drawbuffer, IntBuffer value);
public void glClearBufferuiv(int buffer, int drawbuffer, IntBuffer value);
public int glClientWaitSync(long sync, int flags, long timeout);
public void glCompressedTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int imageSize, Buffer data);
public void glCompressedTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int imageSize, Buffer data);
public void glCopyBufferSubData(int readTarget, int writeTarget, int readOffset, int writeOffset, int size);
public void glCopyTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height);
public void glDeleteQueries(int n, int[] ids, int offset);
public void glDeleteQueries(int n, IntBuffer ids);
public void glDeleteQuery(int id);
public void glDeleteSamplers(int count, int[] samplers, int offset);
public void glDeleteSamplers(int count, IntBuffer samplers);
public void glDeleteSampler(int sampler);
public void glDeleteSync(long sync);
public void glDeleteTransformFeedbacks(int n, int[] ids, int offset);
public void glDeleteTransformFeedbacks(int n, IntBuffer ids);
public void glDeleteTransformFeedback(int id);
public void glDeleteVertexArrays(int n, int[] arrays, int offset);
public void glDeleteVertexArrays(int n, IntBuffer arrays);
public void glDeleteVertexArray(int array);
public void glDrawArraysInstanced(int mode, int first, int count, int instanceCount);
public void glDrawBuffers(int n, IntBuffer bufs);
public void glDrawElementsInstanced(int mode, int count, int type, Buffer indices, int instanceCount);
public void glDrawElementsInstanced(int mode, int count, int type, int indices, int instanceCount);
public void glDrawRangeElements(int mode, int start, int end, int count, int type, Buffer indices);
public void glDrawRangeElements(int mode, int start, int end, int count, int type, int offset);
public void glEndQuery(int target);
public void glEndTransformFeedback();
public long glFenceSync(int condition, int flags);
public void glFlushMappedBufferRange(int target, int offset, int length);
public void glFramebufferTextureLayer(int target, int attachment, int texture, int level, int layer);
public void glGenQueries(int n, int[] ids, int offset);
public void glGenQueries(int n, IntBuffer ids);
public int glGenQuery();
public void glGenSamplers(int count, int[] samplers, int offset);
public void glGenSamplers(int count, IntBuffer samplers);
public int glGenSampler();
public void glGenTransformFeedbacks(int n, int[] ids, int offset);
public void glGenTransformFeedbacks(int n, IntBuffer ids);
public int glGenTransformFeedback();
public void glGenVertexArrays(int n, int[] arrays, int offset);
public void glGenVertexArrays(int n, IntBuffer arrays);
public int glGenVertexArray();
public String glGetActiveUniformBlockName(int program, int uniformBlockIndex);
public void glGetActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, IntBuffer params);
public void glGetActiveUniformsiv(int program, int uniformCount, IntBuffer uniformIndices, int pname, IntBuffer params);
public int glGetBufferParameteri(int target, int pname);
public int glGetFragDataLocation(int program, String name);
public void glGetInteger64v(int pname, LongBuffer params);
public void glGetIntegeri_v(int target, int index, IntBuffer data);
public void glGetInternalformativ(int target, int internalformat, int pname, int bufSize, IntBuffer params);
public void glGetQueryiv(int target, int pname, IntBuffer params);
public void glGetQueryObjectuiv(int id, int pname, IntBuffer params);
public void glGetSamplerParameterfv(int sampler, int pname, FloatBuffer params);
public void glGetSamplerParameteriv(int sampler, int pname, IntBuffer params);
public String glGetStringi(int name, int index);
public void glGetSynciv(long sync, int pname, int bufSize, IntBuffer length, IntBuffer values);
public void glGetTransformFeedbackVarying(int program, int index, int bufSize, IntBuffer length, IntBuffer size, IntBuffer type, byte[] name);
public int glGetUniformBlockIndex(int program, String uniformBlockName);
public void glGetUniformIndices(int program, String[] uniformNames, IntBuffer uniformIndices);
public void glGetUniformuiv(int program, int location, IntBuffer params);
public void glGetVertexAttribIiv(int index, int pname, IntBuffer params);
public void glGetVertexAttribIuiv(int index, int pname, IntBuffer params);
public void glInvalidateFramebuffer(int target, int numAttachments, IntBuffer attachments);
public void glInvalidateSubFramebuffer(int target, int numAttachments, IntBuffer attachments, int x, int y, int width, int height);
public boolean glIsQuery(int id);
public boolean glIsSampler(int sampler);
public boolean glIsSync(long sync);
public boolean glIsTransformFeedback(int id);
public boolean glIsVertexArray(int array);
public ByteBuffer glMapBufferRange(int target, int offset, int length, int access);
public void glPauseTransformFeedback();
public void glReadBuffer(int mode);
public void glRenderbufferStorageMultisample(int target, int samples, int internalformat, int width, int height);
public void glResumeTransformFeedback();
public void glSamplerParameterf(int sampler, int pname, float param);
public void glSamplerParameterfv(int sampler, int pname, FloatBuffer param);
public void glSamplerParameteri(int sampler, int pname, int param);
public void glSamplerParameteriv(int sampler, int pname, IntBuffer param);
public void glTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format, int type, Buffer pixels);
public void glTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format, int type, int offset);
public void glTexStorage2D(int target, int levels, int internalformat, int width, int height);
public void glTexStorage3D(int target, int levels, int internalformat, int width, int height, int depth);
public void glTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int type, Buffer pixels);
public void glTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, int format, int type, int offset);
public void glTransformFeedbackVaryings(int program, String[] varyings, int bufferMode);
public void glUniform1uiv(int location, int count, IntBuffer value);
public void glUniform2uiv(int location, int count, IntBuffer value);
public void glUniform3uiv(int location, int count, IntBuffer value);
public void glUniform4uiv(int location, int count, IntBuffer value);
public void glUniformBlockBinding(int program, int uniformBlockIndex, int uniformBlockBinding);
public void glUniformMatrix2x3fv(int location, int count, boolean transpose, FloatBuffer value);
public void glUniformMatrix2x4fv(int location, int count, boolean transpose, FloatBuffer value);
public void glUniformMatrix3x2fv(int location, int count, boolean transpose, FloatBuffer value);
public void glUniformMatrix3x4fv(int location, int count, boolean transpose, FloatBuffer value);
public void glUniformMatrix4x2fv(int location, int count, boolean transpose, FloatBuffer value);
public void glUniformMatrix4x3fv(int location, int count, boolean transpose, FloatBuffer value);
public boolean glUnmapBuffer(int target);
public void glVertexAttribDivisor(int index, int divisor);
public void glVertexAttribI4i(int index, int x, int y, int z, int w);
public void glVertexAttribI4iv(int index, IntBuffer v);
public void glVertexAttribI4ui(int index, int x, int y, int z, int w);
public void glVertexAttribI4uiv(int index, IntBuffer v);
public void glVertexAttribIPointer(int index, int size, int type, int stride, Buffer pointer);
public void glVertexAttribIPointer(int index, int size, int type, int stride, int offset);
public void glWaitSync(long sync, int flags, long timeout);
}public class GwtGL20Debug extends GwtGL20 {
// Wrapped GL20 implementation with error checking
// All GL20 methods with automatic glGetError() calls
}public class GwtGL30Debug extends GwtGL30 {
// Wrapped GL30 implementation with error checking
// All GL30 methods with automatic glGetError() calls
}public class GwtCursor implements Cursor {
// Browser cursor implementation
}// In your ApplicationListener
public void create() {
// Get graphics instance
Graphics graphics = Gdx.graphics;
// Check WebGL support and version
if (graphics.getType() == GraphicsType.WebGL) {
GL20 gl = graphics.getGL20();
// Use GL20 for rendering
if (graphics.getGL30() != null) {
GL30 gl30 = graphics.getGL30();
// Use GL30 features if available
}
}
}public class MyGameGwt extends GwtApplication {
@Override
public GwtApplicationConfiguration getConfig() {
GwtApplicationConfiguration config = new GwtApplicationConfiguration(800, 600);
// Enable debug mode during development
return config;
}
@Override
public ApplicationListener createApplicationListener() {
return new ApplicationListener() {
@Override
public void create() {
// Enable GL debug mode
Graphics graphics = Gdx.graphics;
if (graphics.getGL30() != null) {
graphics.setGL30(new GwtGL30Debug(graphics.getGL30()));
} else {
graphics.setGL20(new GwtGL20Debug(graphics.getGL20()));
}
}
// ... other methods
};
}
}Install with Tessl CLI
npx tessl i tessl/maven-com-badlogicgames-gdx--gdx-backend-gwt