0
# Graphics and Rendering
1
2
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.
3
4
## Core Graphics Classes
5
6
### GwtGraphics { .api }
7
8
```java
9
public class GwtGraphics extends AbstractGraphics {
10
// Display information
11
public int getWidth();
12
public int getHeight();
13
public int getBackBufferWidth();
14
public int getBackBufferHeight();
15
public float getBackBufferScale();
16
public int getSafeInsetLeft();
17
public int getSafeInsetTop();
18
public int getSafeInsetBottom();
19
public int getSafeInsetRight();
20
21
// Frame timing
22
public float getDeltaTime();
23
public float getRawDeltaTime();
24
public int getFramesPerSecond();
25
public GraphicsType getType(); // Returns GraphicsType.WebGL
26
public float getPpiX();
27
public float getPpiY();
28
public float getPpcX();
29
public float getPpcY();
30
public float getDensity();
31
32
// Display modes (limited in browsers)
33
public boolean supportsDisplayModeChange();
34
public DisplayMode[] getDisplayModes();
35
public DisplayMode getDisplayMode();
36
public boolean setFullscreenMode(DisplayMode displayMode);
37
public boolean setWindowedMode(int width, int height);
38
39
// V-Sync (no-op in browsers)
40
public void setVSync(boolean vsync);
41
public BufferFormat getBufferFormat();
42
public boolean supportsExtension(String extension);
43
44
// OpenGL context
45
public GL20 getGL20();
46
public GL30 getGL30();
47
public void setGL20(GL20 gl20);
48
public void setGL30(GL30 gl30);
49
50
// Window management (web-specific)
51
public void setTitle(String title);
52
public void setUndecorated(boolean undecorated);
53
public void setResizable(boolean resizable);
54
public void setSystemCursor(Cursor.SystemCursor systemCursor);
55
public void setCursor(Cursor cursor);
56
57
// Monitor and display information
58
public Monitor getPrimaryMonitor();
59
public Monitor getMonitor();
60
public Monitor[] getMonitors();
61
public DisplayMode[] getDisplayModes(Monitor monitor);
62
public DisplayMode getDisplayMode(Monitor monitor);
63
64
// Screenshot capability
65
public void requestRendering();
66
public boolean isFullscreen();
67
68
// Cursor creation
69
public Cursor newCursor(Pixmap pixmap, int xHotspot, int yHotspot);
70
}
71
```
72
73
## OpenGL Implementations
74
75
### GwtGL20 { .api }
76
77
```java
78
public class GwtGL20 implements GL20 {
79
// All standard GL20 methods
80
public void glActiveTexture(int texture);
81
public void glAttachShader(int program, int shader);
82
public void glBindAttribLocation(int program, int index, String name);
83
public void glBindBuffer(int target, int buffer);
84
public void glBindFramebuffer(int target, int framebuffer);
85
public void glBindRenderbuffer(int target, int renderbuffer);
86
public void glBindTexture(int target, int texture);
87
public void glBlendColor(float red, float green, float blue, float alpha);
88
public void glBlendEquation(int mode);
89
public void glBlendEquationSeparate(int modeRGB, int modeAlpha);
90
public void glBlendFunc(int sfactor, int dfactor);
91
public void glBlendFuncSeparate(int srcRGB, int dstRGB, int srcAlpha, int dstAlpha);
92
public void glBufferData(int target, int size, Buffer data, int usage);
93
public void glBufferSubData(int target, int offset, int size, Buffer data);
94
public int glCheckFramebufferStatus(int target);
95
public void glClear(int mask);
96
public void glClearColor(float red, float green, float blue, float alpha);
97
public void glClearDepthf(float depth);
98
public void glClearStencil(int s);
99
public void glColorMask(boolean red, boolean green, boolean blue, boolean alpha);
100
public void glCompileShader(int shader);
101
public void glCompressedTexImage2D(int target, int level, int internalformat, int width, int height, int border, int imageSize, Buffer data);
102
public void glCompressedTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int imageSize, Buffer data);
103
public void glCopyTexImage2D(int target, int level, int internalformat, int x, int y, int width, int height, int border);
104
public void glCopyTexSubImage2D(int target, int level, int xoffset, int yoffset, int x, int y, int width, int height);
105
public int glCreateProgram();
106
public int glCreateShader(int type);
107
public void glCullFace(int mode);
108
public void glDeleteBuffers(int n, IntBuffer buffers);
109
public void glDeleteBuffer(int buffer);
110
public void glDeleteFramebuffers(int n, IntBuffer framebuffers);
111
public void glDeleteFramebuffer(int framebuffer);
112
public void glDeleteProgram(int program);
113
public void glDeleteRenderbuffers(int n, IntBuffer renderbuffers);
114
public void glDeleteRenderbuffer(int renderbuffer);
115
public void glDeleteShader(int shader);
116
public void glDeleteTextures(int n, IntBuffer textures);
117
public void glDeleteTexture(int texture);
118
public void glDepthFunc(int func);
119
public void glDepthMask(boolean flag);
120
public void glDepthRangef(float zNear, float zFar);
121
public void glDetachShader(int program, int shader);
122
public void glDisable(int cap);
123
public void glDisableVertexAttribArray(int index);
124
public void glDrawArrays(int mode, int first, int count);
125
public void glDrawElements(int mode, int count, int type, Buffer indices);
126
public void glEnable(int cap);
127
public void glEnableVertexAttribArray(int index);
128
public void glFinish();
129
public void glFlush();
130
public void glFramebufferRenderbuffer(int target, int attachment, int renderbuffertarget, int renderbuffer);
131
public void glFramebufferTexture2D(int target, int attachment, int textarget, int texture, int level);
132
public void glFrontFace(int mode);
133
public void glGenBuffers(int n, IntBuffer buffers);
134
public int glGenBuffer();
135
public void glGenerateMipmap(int target);
136
public void glGenFramebuffers(int n, IntBuffer framebuffers);
137
public int glGenFramebuffer();
138
public void glGenRenderbuffers(int n, IntBuffer renderbuffers);
139
public int glGenRenderbuffer();
140
public void glGenTextures(int n, IntBuffer textures);
141
public int glGenTexture();
142
public String glGetActiveAttrib(int program, int index, IntBuffer size, IntBuffer type);
143
public String glGetActiveUniform(int program, int index, IntBuffer size, IntBuffer type);
144
public void glGetAttachedShaders(int program, int maxcount, Buffer count, IntBuffer shaders);
145
public int glGetAttribLocation(int program, String name);
146
public void glGetBooleanv(int pname, Buffer params);
147
public void glGetBufferParameteriv(int target, int pname, IntBuffer params);
148
public int glGetError();
149
public void glGetFloatv(int pname, FloatBuffer params);
150
public void glGetFramebufferAttachmentParameteriv(int target, int attachment, int pname, IntBuffer params);
151
public void glGetIntegerv(int pname, IntBuffer params);
152
public String glGetProgramInfoLog(int program);
153
public void glGetProgramiv(int program, int pname, IntBuffer params);
154
public void glGetRenderbufferParameteriv(int target, int pname, IntBuffer params);
155
public String glGetShaderInfoLog(int shader);
156
public void glGetShaderiv(int shader, int pname, IntBuffer params);
157
public void glGetShaderPrecisionFormat(int shadertype, int precisiontype, IntBuffer range, IntBuffer precision);
158
public void glGetShaderSource(int shader, int bufsize, Buffer length, String source);
159
public String glGetString(int name);
160
public void glGetTexParameterfv(int target, int pname, FloatBuffer params);
161
public void glGetTexParameteriv(int target, int pname, IntBuffer params);
162
public int glGetUniformLocation(int program, String name);
163
public void glGetUniformfv(int program, int location, FloatBuffer params);
164
public void glGetUniformiv(int program, int location, IntBuffer params);
165
public void glGetVertexAttribfv(int index, int pname, FloatBuffer params);
166
public void glGetVertexAttribiv(int index, int pname, IntBuffer params);
167
public void glGetVertexAttribPointerv(int index, int pname, Buffer pointer);
168
public void glHint(int target, int mode);
169
public boolean glIsBuffer(int buffer);
170
public boolean glIsEnabled(int cap);
171
public boolean glIsFramebuffer(int framebuffer);
172
public boolean glIsProgram(int program);
173
public boolean glIsRenderbuffer(int renderbuffer);
174
public boolean glIsShader(int shader);
175
public boolean glIsTexture(int texture);
176
public void glLineWidth(float width);
177
public void glLinkProgram(int program);
178
public void glPixelStorei(int pname, int param);
179
public void glPolygonOffset(float factor, float units);
180
public void glReadPixels(int x, int y, int width, int height, int format, int type, Buffer pixels);
181
public void glReleaseShaderCompiler();
182
public void glRenderbufferStorage(int target, int internalformat, int width, int height);
183
public void glSampleCoverage(float value, boolean invert);
184
public void glScissor(int x, int y, int width, int height);
185
public void glShaderBinary(int n, IntBuffer shaders, int binaryformat, Buffer binary, int length);
186
public void glShaderSource(int shader, String string);
187
public void glStencilFunc(int func, int ref, int mask);
188
public void glStencilFuncSeparate(int face, int func, int ref, int mask);
189
public void glStencilMask(int mask);
190
public void glStencilMaskSeparate(int face, int mask);
191
public void glStencilOp(int fail, int zfail, int zpass);
192
public void glStencilOpSeparate(int face, int fail, int zfail, int zpass);
193
public void glTexImage2D(int target, int level, int internalformat, int width, int height, int border, int format, int type, Buffer pixels);
194
public void glTexParameterf(int target, int pname, float param);
195
public void glTexParameterfv(int target, int pname, FloatBuffer params);
196
public void glTexParameteri(int target, int pname, int param);
197
public void glTexParameteriv(int target, int pname, IntBuffer params);
198
public void glTexSubImage2D(int target, int level, int xoffset, int yoffset, int width, int height, int format, int type, Buffer pixels);
199
public void glUniform1f(int location, float x);
200
public void glUniform1fv(int location, int count, FloatBuffer v);
201
public void glUniform1fv(int location, int count, float[] v, int offset);
202
public void glUniform1i(int location, int x);
203
public void glUniform1iv(int location, int count, IntBuffer v);
204
public void glUniform1iv(int location, int count, int[] v, int offset);
205
public void glUniform2f(int location, float x, float y);
206
public void glUniform2fv(int location, int count, FloatBuffer v);
207
public void glUniform2fv(int location, int count, float[] v, int offset);
208
public void glUniform2i(int location, int x, int y);
209
public void glUniform2iv(int location, int count, IntBuffer v);
210
public void glUniform2iv(int location, int count, int[] v, int offset);
211
public void glUniform3f(int location, float x, float y, float z);
212
public void glUniform3fv(int location, int count, FloatBuffer v);
213
public void glUniform3fv(int location, int count, float[] v, int offset);
214
public void glUniform3i(int location, int x, int y, int z);
215
public void glUniform3iv(int location, int count, IntBuffer v);
216
public void glUniform3iv(int location, int count, int[] v, int offset);
217
public void glUniform4f(int location, float x, float y, float z, float w);
218
public void glUniform4fv(int location, int count, FloatBuffer v);
219
public void glUniform4fv(int location, int count, float[] v, int offset);
220
public void glUniform4i(int location, int x, int y, int z, int w);
221
public void glUniform4iv(int location, int count, IntBuffer v);
222
public void glUniform4iv(int location, int count, int[] v, int offset);
223
public void glUniformMatrix2fv(int location, int count, boolean transpose, FloatBuffer value);
224
public void glUniformMatrix2fv(int location, int count, boolean transpose, float[] value, int offset);
225
public void glUniformMatrix3fv(int location, int count, boolean transpose, FloatBuffer value);
226
public void glUniformMatrix3fv(int location, int count, boolean transpose, float[] value, int offset);
227
public void glUniformMatrix4fv(int location, int count, boolean transpose, FloatBuffer value);
228
public void glUniformMatrix4fv(int location, int count, boolean transpose, float[] value, int offset);
229
public void glUseProgram(int program);
230
public void glValidateProgram(int program);
231
public void glVertexAttrib1f(int indx, float x);
232
public void glVertexAttrib1fv(int indx, FloatBuffer values);
233
public void glVertexAttrib2f(int indx, float x, float y);
234
public void glVertexAttrib2fv(int indx, FloatBuffer values);
235
public void glVertexAttrib3f(int indx, float x, float y, float z);
236
public void glVertexAttrib3fv(int indx, FloatBuffer values);
237
public void glVertexAttrib4f(int indx, float x, float y, float z, float w);
238
public void glVertexAttrib4fv(int indx, FloatBuffer values);
239
public void glVertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, Buffer ptr);
240
public void glVertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, int ptr);
241
public void glViewport(int x, int y, int width, int height);
242
}
243
```
244
245
### GwtGL30 { .api }
246
247
```java
248
public class GwtGL30 extends GwtGL20 implements GL30 {
249
// Additional GL30 methods
250
public void glBeginQuery(int target, int id);
251
public void glBeginTransformFeedback(int primitiveMode);
252
public void glBindBufferBase(int target, int index, int buffer);
253
public void glBindBufferRange(int target, int index, int buffer, int offset, int size);
254
public void glBindSampler(int unit, int sampler);
255
public void glBindTransformFeedback(int target, int id);
256
public void glBindVertexArray(int array);
257
public void glBlitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, int mask, int filter);
258
public void glClearBufferfi(int buffer, int drawbuffer, float depth, int stencil);
259
public void glClearBufferfv(int buffer, int drawbuffer, FloatBuffer value);
260
public void glClearBufferiv(int buffer, int drawbuffer, IntBuffer value);
261
public void glClearBufferuiv(int buffer, int drawbuffer, IntBuffer value);
262
public int glClientWaitSync(long sync, int flags, long timeout);
263
public void glCompressedTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int imageSize, Buffer data);
264
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);
265
public void glCopyBufferSubData(int readTarget, int writeTarget, int readOffset, int writeOffset, int size);
266
public void glCopyTexSubImage3D(int target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height);
267
public void glDeleteQueries(int n, int[] ids, int offset);
268
public void glDeleteQueries(int n, IntBuffer ids);
269
public void glDeleteQuery(int id);
270
public void glDeleteSamplers(int count, int[] samplers, int offset);
271
public void glDeleteSamplers(int count, IntBuffer samplers);
272
public void glDeleteSampler(int sampler);
273
public void glDeleteSync(long sync);
274
public void glDeleteTransformFeedbacks(int n, int[] ids, int offset);
275
public void glDeleteTransformFeedbacks(int n, IntBuffer ids);
276
public void glDeleteTransformFeedback(int id);
277
public void glDeleteVertexArrays(int n, int[] arrays, int offset);
278
public void glDeleteVertexArrays(int n, IntBuffer arrays);
279
public void glDeleteVertexArray(int array);
280
public void glDrawArraysInstanced(int mode, int first, int count, int instanceCount);
281
public void glDrawBuffers(int n, IntBuffer bufs);
282
public void glDrawElementsInstanced(int mode, int count, int type, Buffer indices, int instanceCount);
283
public void glDrawElementsInstanced(int mode, int count, int type, int indices, int instanceCount);
284
public void glDrawRangeElements(int mode, int start, int end, int count, int type, Buffer indices);
285
public void glDrawRangeElements(int mode, int start, int end, int count, int type, int offset);
286
public void glEndQuery(int target);
287
public void glEndTransformFeedback();
288
public long glFenceSync(int condition, int flags);
289
public void glFlushMappedBufferRange(int target, int offset, int length);
290
public void glFramebufferTextureLayer(int target, int attachment, int texture, int level, int layer);
291
public void glGenQueries(int n, int[] ids, int offset);
292
public void glGenQueries(int n, IntBuffer ids);
293
public int glGenQuery();
294
public void glGenSamplers(int count, int[] samplers, int offset);
295
public void glGenSamplers(int count, IntBuffer samplers);
296
public int glGenSampler();
297
public void glGenTransformFeedbacks(int n, int[] ids, int offset);
298
public void glGenTransformFeedbacks(int n, IntBuffer ids);
299
public int glGenTransformFeedback();
300
public void glGenVertexArrays(int n, int[] arrays, int offset);
301
public void glGenVertexArrays(int n, IntBuffer arrays);
302
public int glGenVertexArray();
303
public String glGetActiveUniformBlockName(int program, int uniformBlockIndex);
304
public void glGetActiveUniformBlockiv(int program, int uniformBlockIndex, int pname, IntBuffer params);
305
public void glGetActiveUniformsiv(int program, int uniformCount, IntBuffer uniformIndices, int pname, IntBuffer params);
306
public int glGetBufferParameteri(int target, int pname);
307
public int glGetFragDataLocation(int program, String name);
308
public void glGetInteger64v(int pname, LongBuffer params);
309
public void glGetIntegeri_v(int target, int index, IntBuffer data);
310
public void glGetInternalformativ(int target, int internalformat, int pname, int bufSize, IntBuffer params);
311
public void glGetQueryiv(int target, int pname, IntBuffer params);
312
public void glGetQueryObjectuiv(int id, int pname, IntBuffer params);
313
public void glGetSamplerParameterfv(int sampler, int pname, FloatBuffer params);
314
public void glGetSamplerParameteriv(int sampler, int pname, IntBuffer params);
315
public String glGetStringi(int name, int index);
316
public void glGetSynciv(long sync, int pname, int bufSize, IntBuffer length, IntBuffer values);
317
public void glGetTransformFeedbackVarying(int program, int index, int bufSize, IntBuffer length, IntBuffer size, IntBuffer type, byte[] name);
318
public int glGetUniformBlockIndex(int program, String uniformBlockName);
319
public void glGetUniformIndices(int program, String[] uniformNames, IntBuffer uniformIndices);
320
public void glGetUniformuiv(int program, int location, IntBuffer params);
321
public void glGetVertexAttribIiv(int index, int pname, IntBuffer params);
322
public void glGetVertexAttribIuiv(int index, int pname, IntBuffer params);
323
public void glInvalidateFramebuffer(int target, int numAttachments, IntBuffer attachments);
324
public void glInvalidateSubFramebuffer(int target, int numAttachments, IntBuffer attachments, int x, int y, int width, int height);
325
public boolean glIsQuery(int id);
326
public boolean glIsSampler(int sampler);
327
public boolean glIsSync(long sync);
328
public boolean glIsTransformFeedback(int id);
329
public boolean glIsVertexArray(int array);
330
public ByteBuffer glMapBufferRange(int target, int offset, int length, int access);
331
public void glPauseTransformFeedback();
332
public void glReadBuffer(int mode);
333
public void glRenderbufferStorageMultisample(int target, int samples, int internalformat, int width, int height);
334
public void glResumeTransformFeedback();
335
public void glSamplerParameterf(int sampler, int pname, float param);
336
public void glSamplerParameterfv(int sampler, int pname, FloatBuffer param);
337
public void glSamplerParameteri(int sampler, int pname, int param);
338
public void glSamplerParameteriv(int sampler, int pname, IntBuffer param);
339
public void glTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format, int type, Buffer pixels);
340
public void glTexImage3D(int target, int level, int internalformat, int width, int height, int depth, int border, int format, int type, int offset);
341
public void glTexStorage2D(int target, int levels, int internalformat, int width, int height);
342
public void glTexStorage3D(int target, int levels, int internalformat, int width, int height, int depth);
343
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);
344
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);
345
public void glTransformFeedbackVaryings(int program, String[] varyings, int bufferMode);
346
public void glUniform1uiv(int location, int count, IntBuffer value);
347
public void glUniform2uiv(int location, int count, IntBuffer value);
348
public void glUniform3uiv(int location, int count, IntBuffer value);
349
public void glUniform4uiv(int location, int count, IntBuffer value);
350
public void glUniformBlockBinding(int program, int uniformBlockIndex, int uniformBlockBinding);
351
public void glUniformMatrix2x3fv(int location, int count, boolean transpose, FloatBuffer value);
352
public void glUniformMatrix2x4fv(int location, int count, boolean transpose, FloatBuffer value);
353
public void glUniformMatrix3x2fv(int location, int count, boolean transpose, FloatBuffer value);
354
public void glUniformMatrix3x4fv(int location, int count, boolean transpose, FloatBuffer value);
355
public void glUniformMatrix4x2fv(int location, int count, boolean transpose, FloatBuffer value);
356
public void glUniformMatrix4x3fv(int location, int count, boolean transpose, FloatBuffer value);
357
public boolean glUnmapBuffer(int target);
358
public void glVertexAttribDivisor(int index, int divisor);
359
public void glVertexAttribI4i(int index, int x, int y, int z, int w);
360
public void glVertexAttribI4iv(int index, IntBuffer v);
361
public void glVertexAttribI4ui(int index, int x, int y, int z, int w);
362
public void glVertexAttribI4uiv(int index, IntBuffer v);
363
public void glVertexAttribIPointer(int index, int size, int type, int stride, Buffer pointer);
364
public void glVertexAttribIPointer(int index, int size, int type, int stride, int offset);
365
public void glWaitSync(long sync, int flags, long timeout);
366
}
367
```
368
369
## Debug Implementations
370
371
### GwtGL20Debug { .api }
372
373
```java
374
public class GwtGL20Debug extends GwtGL20 {
375
// Wrapped GL20 implementation with error checking
376
// All GL20 methods with automatic glGetError() calls
377
}
378
```
379
380
### GwtGL30Debug { .api }
381
382
```java
383
public class GwtGL30Debug extends GwtGL30 {
384
// Wrapped GL30 implementation with error checking
385
// All GL30 methods with automatic glGetError() calls
386
}
387
```
388
389
## Cursor Support
390
391
### GwtCursor { .api }
392
393
```java
394
public class GwtCursor implements Cursor {
395
// Browser cursor implementation
396
}
397
```
398
399
## Usage Examples
400
401
### Basic Graphics Setup
402
403
```java
404
// In your ApplicationListener
405
public void create() {
406
// Get graphics instance
407
Graphics graphics = Gdx.graphics;
408
409
// Check WebGL support and version
410
if (graphics.getType() == GraphicsType.WebGL) {
411
GL20 gl = graphics.getGL20();
412
// Use GL20 for rendering
413
414
if (graphics.getGL30() != null) {
415
GL30 gl30 = graphics.getGL30();
416
// Use GL30 features if available
417
}
418
}
419
}
420
```
421
422
### Debug OpenGL Context
423
424
```java
425
public class MyGameGwt extends GwtApplication {
426
@Override
427
public GwtApplicationConfiguration getConfig() {
428
GwtApplicationConfiguration config = new GwtApplicationConfiguration(800, 600);
429
// Enable debug mode during development
430
return config;
431
}
432
433
@Override
434
public ApplicationListener createApplicationListener() {
435
return new ApplicationListener() {
436
@Override
437
public void create() {
438
// Enable GL debug mode
439
Graphics graphics = Gdx.graphics;
440
if (graphics.getGL30() != null) {
441
graphics.setGL30(new GwtGL30Debug(graphics.getGL30()));
442
} else {
443
graphics.setGL20(new GwtGL20Debug(graphics.getGL20()));
444
}
445
}
446
// ... other methods
447
};
448
}
449
}
450
```