@gjsify/webgl 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +14 -0
  2. package/lib/cjs/@types/glsl-tokenizer/index.d.js +0 -0
  3. package/lib/cjs/extensions/ext-blend-minmax.js +37 -0
  4. package/lib/cjs/extensions/ext-texture-filter-anisotropic.js +37 -0
  5. package/lib/cjs/extensions/oes-element-index-unit.js +33 -0
  6. package/lib/cjs/extensions/oes-standard-derivatives.js +36 -0
  7. package/lib/cjs/extensions/oes-texture-float-linear.js +33 -0
  8. package/lib/cjs/extensions/oes-texture-float.js +33 -0
  9. package/lib/cjs/extensions/stackgl-destroy-context.js +31 -0
  10. package/lib/cjs/extensions/stackgl-resize-drawing-buffer.js +31 -0
  11. package/lib/cjs/html-canvas-element.js +89 -0
  12. package/lib/cjs/index.js +34 -0
  13. package/lib/cjs/index.spec.js +175 -0
  14. package/lib/cjs/linkable.js +69 -0
  15. package/lib/cjs/test.js +25 -0
  16. package/lib/cjs/types/constructor.js +15 -0
  17. package/lib/cjs/types/extension.js +15 -0
  18. package/lib/cjs/types/index.js +21 -0
  19. package/lib/cjs/types/typed-array.js +15 -0
  20. package/lib/cjs/types/webgl-constants.js +15 -0
  21. package/lib/cjs/types/webgl-context-attribute-options.js +15 -0
  22. package/lib/cjs/utils.js +241 -0
  23. package/lib/cjs/webgl-active-info.js +29 -0
  24. package/lib/cjs/webgl-buffer.js +37 -0
  25. package/lib/cjs/webgl-context-attributes.js +43 -0
  26. package/lib/cjs/webgl-drawing-buffer-wrapper.js +29 -0
  27. package/lib/cjs/webgl-framebuffer.js +128 -0
  28. package/lib/cjs/webgl-program.js +45 -0
  29. package/lib/cjs/webgl-renderbuffer.js +43 -0
  30. package/lib/cjs/webgl-rendering-context.js +3355 -0
  31. package/lib/cjs/webgl-shader-precision-format.js +30 -0
  32. package/lib/cjs/webgl-shader.js +42 -0
  33. package/lib/cjs/webgl-texture-unit.js +31 -0
  34. package/lib/cjs/webgl-texture.js +41 -0
  35. package/lib/cjs/webgl-uniform-location.js +34 -0
  36. package/lib/cjs/webgl-vertex-attribute.js +166 -0
  37. package/lib/esm/@types/glsl-tokenizer/index.d.js +0 -0
  38. package/lib/esm/extensions/ext-blend-minmax.js +18 -0
  39. package/lib/esm/extensions/ext-texture-filter-anisotropic.js +18 -0
  40. package/lib/esm/extensions/oes-element-index-unit.js +14 -0
  41. package/lib/esm/extensions/oes-standard-derivatives.js +17 -0
  42. package/lib/esm/extensions/oes-texture-float-linear.js +14 -0
  43. package/lib/esm/extensions/oes-texture-float.js +14 -0
  44. package/lib/esm/extensions/stackgl-destroy-context.js +12 -0
  45. package/lib/esm/extensions/stackgl-resize-drawing-buffer.js +12 -0
  46. package/lib/esm/html-canvas-element.js +70 -0
  47. package/lib/esm/index.js +18 -0
  48. package/lib/esm/index.spec.js +146 -0
  49. package/lib/esm/linkable.js +50 -0
  50. package/lib/esm/test.js +3 -0
  51. package/lib/esm/types/constructor.js +0 -0
  52. package/lib/esm/types/extension.js +0 -0
  53. package/lib/esm/types/index.js +5 -0
  54. package/lib/esm/types/typed-array.js +0 -0
  55. package/lib/esm/types/webgl-constants.js +0 -0
  56. package/lib/esm/types/webgl-context-attribute-options.js +0 -0
  57. package/lib/esm/utils.js +212 -0
  58. package/lib/esm/webgl-active-info.js +10 -0
  59. package/lib/esm/webgl-buffer.js +18 -0
  60. package/lib/esm/webgl-context-attributes.js +24 -0
  61. package/lib/esm/webgl-drawing-buffer-wrapper.js +10 -0
  62. package/lib/esm/webgl-framebuffer.js +109 -0
  63. package/lib/esm/webgl-program.js +26 -0
  64. package/lib/esm/webgl-renderbuffer.js +24 -0
  65. package/lib/esm/webgl-rendering-context.js +3343 -0
  66. package/lib/esm/webgl-shader-precision-format.js +11 -0
  67. package/lib/esm/webgl-shader.js +23 -0
  68. package/lib/esm/webgl-texture-unit.js +12 -0
  69. package/lib/esm/webgl-texture.js +22 -0
  70. package/lib/esm/webgl-uniform-location.js +15 -0
  71. package/lib/esm/webgl-vertex-attribute.js +147 -0
  72. package/lib/types/extensions/ext-blend-minmax.d.ts +7 -0
  73. package/lib/types/extensions/ext-texture-filter-anisotropic.d.ts +7 -0
  74. package/lib/types/extensions/oes-element-index-unit.d.ts +4 -0
  75. package/lib/types/extensions/oes-standard-derivatives.d.ts +6 -0
  76. package/lib/types/extensions/oes-texture-float-linear.d.ts +4 -0
  77. package/lib/types/extensions/oes-texture-float.d.ts +4 -0
  78. package/lib/types/extensions/stackgl-destroy-context.d.ts +6 -0
  79. package/lib/types/extensions/stackgl-resize-drawing-buffer.d.ts +6 -0
  80. package/lib/types/html-canvas-element.d.ts +38 -0
  81. package/lib/types/index.d.ts +18 -0
  82. package/lib/types/linkable.d.ts +13 -0
  83. package/lib/types/types/constructor.d.ts +3 -0
  84. package/lib/types/types/extension.d.ts +2 -0
  85. package/lib/types/types/index.d.ts +5 -0
  86. package/lib/types/types/typed-array.d.ts +1 -0
  87. package/lib/types/types/webgl-constants.d.ts +299 -0
  88. package/lib/types/types/webgl-context-attribute-options.d.ts +12 -0
  89. package/lib/types/utils.d.ts +32 -0
  90. package/lib/types/webgl-active-info.d.ts +7 -0
  91. package/lib/types/webgl-buffer.d.ts +10 -0
  92. package/lib/types/webgl-context-attributes.d.ts +14 -0
  93. package/lib/types/webgl-drawing-buffer-wrapper.d.ts +6 -0
  94. package/lib/types/webgl-framebuffer.d.ts +17 -0
  95. package/lib/types/webgl-program.d.ts +14 -0
  96. package/lib/types/webgl-renderbuffer.d.ts +12 -0
  97. package/lib/types/webgl-rendering-context.d.ts +260 -0
  98. package/lib/types/webgl-shader-precision-format.d.ts +7 -0
  99. package/lib/types/webgl-shader.d.ts +12 -0
  100. package/lib/types/webgl-texture-unit.d.ts +10 -0
  101. package/lib/types/webgl-texture.d.ts +14 -0
  102. package/lib/types/webgl-uniform-location.d.ts +18 -0
  103. package/lib/types/webgl-vertex-attribute.d.ts +38 -0
  104. package/meson.build +39 -0
  105. package/package.json +55 -0
  106. package/src/test/app.vala +60 -0
  107. package/src/ts/@types/glsl-tokenizer/index.d.ts +18 -0
  108. package/src/ts/extensions/angle-instanced-arrays.ts.off +232 -0
  109. package/src/ts/extensions/ext-blend-minmax.ts +18 -0
  110. package/src/ts/extensions/ext-texture-filter-anisotropic.ts +18 -0
  111. package/src/ts/extensions/oes-element-index-unit.ts +14 -0
  112. package/src/ts/extensions/oes-standard-derivatives.ts +17 -0
  113. package/src/ts/extensions/oes-texture-float-linear.ts +14 -0
  114. package/src/ts/extensions/oes-texture-float.ts +14 -0
  115. package/src/ts/extensions/oes-vertex-array-object.ts.off +128 -0
  116. package/src/ts/extensions/stackgl-destroy-context.ts +12 -0
  117. package/src/ts/extensions/stackgl-resize-drawing-buffer.ts +14 -0
  118. package/src/ts/extensions/webgl-draw-buffers.ts.off +107 -0
  119. package/src/ts/html-canvas-element.ts +98 -0
  120. package/src/ts/index.spec.ts +186 -0
  121. package/src/ts/index.ts +21 -0
  122. package/src/ts/linkable.ts +55 -0
  123. package/src/ts/test.ts +6 -0
  124. package/src/ts/types/constructor.ts +3 -0
  125. package/src/ts/types/extension.ts +3 -0
  126. package/src/ts/types/index.ts +26 -0
  127. package/src/ts/types/typed-array.ts +1 -0
  128. package/src/ts/types/webgl-constants.ts +300 -0
  129. package/src/ts/types/webgl-context-attribute-options.ts +12 -0
  130. package/src/ts/utils.ts +266 -0
  131. package/src/ts/webgl-active-info.ts +13 -0
  132. package/src/ts/webgl-buffer.ts +21 -0
  133. package/src/ts/webgl-context-attributes.ts +24 -0
  134. package/src/ts/webgl-drawing-buffer-wrapper.ts +10 -0
  135. package/src/ts/webgl-framebuffer.ts +133 -0
  136. package/src/ts/webgl-program.ts +30 -0
  137. package/src/ts/webgl-renderbuffer.ts +28 -0
  138. package/src/ts/webgl-rendering-context.ts +4050 -0
  139. package/src/ts/webgl-shader-precision-format.ts +12 -0
  140. package/src/ts/webgl-shader.ts +29 -0
  141. package/src/ts/webgl-texture-unit.ts +16 -0
  142. package/src/ts/webgl-texture.ts +27 -0
  143. package/src/ts/webgl-uniform-location.ts +18 -0
  144. package/src/ts/webgl-vertex-attribute.ts +169 -0
  145. package/src/vala/handle-types.vala +23 -0
  146. package/src/vala/webgl-rendering-context-base.vala +1265 -0
  147. package/src/vala/webgl-rendering-context.vala +265 -0
  148. package/src/vapi/epoxy.vapi +14558 -0
  149. package/src/vapi/glesv2.vapi +670 -0
  150. package/test.gjs.js +39972 -0
  151. package/test.gjs.js.meta.json +1 -0
  152. package/tmp/.tsbuildinfo +1 -0
  153. package/tsconfig.json +38 -0
  154. package/tsconfig.types.json +7 -0
@@ -0,0 +1,260 @@
1
+ import '@girs/gdkpixbuf-2.0';
2
+ import Gwebgl from '@girs/gwebgl-0.1';
3
+ import GdkPixbuf from 'gi://GdkPixbuf?version=2.0';
4
+ import { WebGLContextAttributes } from './webgl-context-attributes.js';
5
+ import { GjsifyHTMLCanvasElement } from './html-canvas-element.js';
6
+ import { WebGLActiveInfo } from './webgl-active-info.js';
7
+ import { WebGLFramebuffer } from './webgl-framebuffer.js';
8
+ import { WebGLBuffer } from './webgl-buffer.js';
9
+ import { WebGLDrawingBufferWrapper } from './webgl-drawing-buffer-wrapper.js';
10
+ import { WebGLProgram } from './webgl-program.js';
11
+ import { WebGLRenderbuffer } from './webgl-renderbuffer.js';
12
+ import { WebGLShader } from './webgl-shader.js';
13
+ import { WebGLShaderPrecisionFormat } from './webgl-shader-precision-format.js';
14
+ import { WebGLTextureUnit } from './webgl-texture-unit.js';
15
+ import { WebGLTexture } from './webgl-texture.js';
16
+ import { WebGLUniformLocation } from './webgl-uniform-location.js';
17
+ import { WebGLVertexArrayObjectState, WebGLVertexArrayGlobalState } from './webgl-vertex-attribute.js';
18
+ import type { TypedArray, WebGLConstants } from './types/index.js';
19
+ export interface GjsifyWebGLRenderingContext extends WebGLConstants {
20
+ }
21
+ export declare class GjsifyWebGLRenderingContext implements WebGLRenderingContext {
22
+ canvas: GjsifyHTMLCanvasElement & HTMLCanvasElement;
23
+ /** TODO implement this: https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/drawingBufferColorSpace */
24
+ drawingBufferColorSpace: PredefinedColorSpace;
25
+ get drawingBufferHeight(): number;
26
+ get drawingBufferWidth(): number;
27
+ DEFAULT_ATTACHMENTS: number[];
28
+ DEFAULT_COLOR_ATTACHMENTS: number[];
29
+ /** context counter */
30
+ _: number;
31
+ _native: Gwebgl.WebGLRenderingContext;
32
+ _contextAttributes: WebGLContextAttributes;
33
+ _extensions: Record<string, any>;
34
+ _programs: Record<number, WebGLProgram>;
35
+ _shaders: Record<number, WebGLShader>;
36
+ _textures: Record<number, WebGLTexture>;
37
+ _framebuffers: Record<number, WebGLFramebuffer>;
38
+ _renderbuffers: Record<number, WebGLRenderbuffer>;
39
+ _buffers: Record<number, WebGLBuffer>;
40
+ _activeProgram: WebGLProgram | null;
41
+ _activeFramebuffer: WebGLFramebuffer | null;
42
+ _activeRenderbuffer: WebGLRenderbuffer | null;
43
+ _checkStencil: boolean;
44
+ _stencilState: boolean;
45
+ _activeTextureUnit: number;
46
+ _errorStack: GLenum[];
47
+ _defaultVertexObjectState: WebGLVertexArrayObjectState;
48
+ _vertexObjectState: WebGLVertexArrayObjectState;
49
+ _vertexGlobalState: WebGLVertexArrayGlobalState;
50
+ _maxTextureSize: number;
51
+ _maxTextureLevel: number;
52
+ _maxCubeMapSize: number;
53
+ _maxCubeMapLevel: number;
54
+ _unpackAlignment: number;
55
+ _packAlignment: number;
56
+ _attrib0Buffer: WebGLBuffer | null;
57
+ _textureUnits: WebGLTextureUnit[];
58
+ _drawingBuffer: WebGLDrawingBufferWrapper | null;
59
+ constructor(canvas: GjsifyHTMLCanvasElement | HTMLCanvasElement | null, options?: Gwebgl.WebGLRenderingContext.ConstructorProperties);
60
+ _initGLConstants(): void;
61
+ _getGlslVersion(es: boolean): "100" | "120";
62
+ _checkDimensions(target: GLenum, width: GLsizei, height: GLsizei, level: number): boolean;
63
+ _checkLocation(location: WebGLUniformLocation | null): boolean;
64
+ _checkLocationActive(location: WebGLUniformLocation | null): boolean;
65
+ _checkOwns(object: any): boolean;
66
+ _checkShaderSource(shader: WebGLShader): boolean;
67
+ _checkStencilState(): boolean;
68
+ _checkTextureTarget(target: GLenum): boolean;
69
+ _checkWrapper(object: any, Wrapper: any): boolean;
70
+ _checkValid(object: any, Type: any): boolean;
71
+ _checkVertexAttribState(maxIndex: number): boolean;
72
+ _checkVertexIndex(index: number): boolean;
73
+ _computePixelSize(type: GLenum, internalFormat: GLenum): 0 | 1 | 2 | 3 | 4;
74
+ _computeRowStride(width: number, pixelSize: number): number;
75
+ _fixupLink(program: WebGLProgram): boolean;
76
+ _framebufferOk(): boolean;
77
+ _getActiveBuffer(target: GLenum): WebGLBuffer;
78
+ _getActiveTextureUnit(): WebGLTextureUnit;
79
+ _getActiveTexture(target: GLenum): WebGLTexture;
80
+ _getAttachments(): any;
81
+ _getColorAttachments(): any;
82
+ _getParameterDirect(pname: GLenum): any;
83
+ _getTexImage(target: GLenum): WebGLTexture;
84
+ _preCheckFramebufferStatus(framebuffer: WebGLFramebuffer): 36053 | 36054 | 36055 | 36057 | 36061;
85
+ _isConstantBlendFunc(factor: GLenum): boolean;
86
+ _isObject(object: any, method: any, Wrapper: any): boolean;
87
+ _resizeDrawingBuffer(width: number, height: number): void;
88
+ _restoreError(lastError: GLenum): void;
89
+ _saveError(): void;
90
+ _switchActiveProgram(active: WebGLProgram | null): void;
91
+ _tryDetachFramebuffer(framebuffer: WebGLFramebuffer | null, renderbuffer: WebGLRenderbuffer): void;
92
+ _updateFramebufferAttachments(framebuffer: WebGLFramebuffer | null): void;
93
+ _validBlendFunc(factor: GLenum): boolean;
94
+ _validBlendMode(mode: GLenum): boolean;
95
+ _validCubeTarget(target: GLenum): boolean;
96
+ _validFramebufferAttachment(attachment: GLenum): boolean;
97
+ _validGLSLIdentifier(str: string): boolean;
98
+ _validTextureTarget(target: GLenum): boolean;
99
+ _verifyTextureCompleteness(target: GLenum, pname: GLenum, param: GLenum): void;
100
+ _wrapShader(_type: GLenum, source: string): string;
101
+ _beginAttrib0Hack(): void;
102
+ _endAttrib0Hack(): void;
103
+ _allocateDrawingBuffer(width: number, height: number): void;
104
+ /**
105
+ * The `WebGLRenderingContext.getContextAttributes()` method returns a `WebGLContextAttributes` object that contains the actual context parameters.
106
+ * Might return `null`, if the context is lost.
107
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/getContextAttributes
108
+ * @returns A `WebGLContextAttributes` object that contains the actual context parameters, or `null` if the context is lost.
109
+ */
110
+ getContextAttributes(): WebGLContextAttributes | null;
111
+ getExtension(name: string): any;
112
+ bufferData(target: GLenum, size: GLsizeiptr, usage: GLenum): void;
113
+ bufferData(target: GLenum, data: TypedArray | BufferSource | null, usage: GLenum): void;
114
+ bufferSubData(target: GLenum, offset: GLintptr, data: BufferSource): void;
115
+ compressedTexImage2D(target: GLenum, level: GLint, internalFormat: GLenum, width: GLsizei, height: GLsizei, border: GLint, data: TypedArray): void;
116
+ compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, data: TypedArray): void;
117
+ readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: TypedArray | null): void;
118
+ texImage2D(target: GLenum, level: GLint, internalFormat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;
119
+ texImage2D(target: GLenum, level: GLint, internalFormat: GLint, format: GLenum, type: GLenum, source: TexImageSource | GdkPixbuf.Pixbuf): void;
120
+ texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void;
121
+ texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, format: GLenum, type: GLenum, source: TexImageSource | GdkPixbuf.Pixbuf): void;
122
+ _checkUniformValid(location: WebGLUniformLocation | null, v0: GLfloat, name: string, count: number, type: string): boolean;
123
+ _checkUniformValueValid(location: WebGLUniformLocation | null, value: Float32List | Int32List, name: string, count: number, _type: string): boolean;
124
+ uniform1fv(location: WebGLUniformLocation | null, value: Float32List | Int32List): void;
125
+ uniform1iv(location: WebGLUniformLocation | null, v: Int32List): void;
126
+ uniform2fv(location: WebGLUniformLocation | null, v: Float32List): void;
127
+ uniform2iv(location: WebGLUniformLocation | null, v: Int32List): void;
128
+ uniform3fv(location: WebGLUniformLocation | null, v: Float32List): void;
129
+ uniform3iv(location: WebGLUniformLocation | null, v: Int32List): void;
130
+ uniform4fv(location: WebGLUniformLocation | null, v: Float32List): void;
131
+ uniform4iv(location: WebGLUniformLocation | null, v: Int32List): void;
132
+ _checkUniformMatrix(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List, name: string, count: number): boolean;
133
+ uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;
134
+ uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;
135
+ uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void;
136
+ activeTexture(texture?: GLenum): void;
137
+ attachShader(program: WebGLProgram, shader: WebGLShader): void;
138
+ bindAttribLocation(program: WebGLProgram, index: GLuint, name: string): void;
139
+ bindBuffer(target: GLenum, buffer: WebGLBuffer | null): void;
140
+ bindFramebuffer(target: GLenum, framebuffer: WebGLFramebuffer | null): void;
141
+ bindRenderbuffer(target: GLenum, renderbuffer: WebGLRenderbuffer | null): void;
142
+ bindTexture(target: GLenum, texture: WebGLTexture | null): void;
143
+ blendColor(red?: GLclampf, green?: GLclampf, blue?: GLclampf, alpha?: GLclampf): void;
144
+ blendEquation(mode?: GLenum): void;
145
+ blendEquationSeparate(modeRGB?: GLenum, modeAlpha?: GLenum): void;
146
+ blendFunc(sfactor?: GLenum, dfactor?: GLenum): void;
147
+ blendFuncSeparate(srcRGB?: GLenum, dstRGB?: GLenum, srcAlpha?: GLenum, dstAlpha?: GLenum): void;
148
+ checkFramebufferStatus(target: GLenum): GLenum;
149
+ clear(mask?: GLbitfield): void;
150
+ clearColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void;
151
+ clearDepth(depth: GLclampf): void;
152
+ clearStencil(s?: GLint): void;
153
+ colorMask(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean): void;
154
+ compileShader(shader: WebGLShader): void;
155
+ copyTexImage2D(target?: GLenum, level?: GLint, internalFormat?: GLenum, x?: GLint, y?: GLint, width?: GLsizei, height?: GLsizei, border?: GLint): void;
156
+ copyTexSubImage2D(target?: GLenum, level?: GLint, xoffset?: GLint, yoffset?: GLint, x?: GLint, y?: GLint, width?: GLsizei, height?: GLsizei): void;
157
+ createBuffer(): WebGLBuffer | null;
158
+ createFramebuffer(): WebGLFramebuffer | null;
159
+ createProgram(): WebGLProgram | null;
160
+ createRenderbuffer(): WebGLRenderbuffer | null;
161
+ createShader(type?: GLenum): WebGLShader | null;
162
+ createTexture(): WebGLTexture | null;
163
+ cullFace(mode: GLenum): void;
164
+ deleteBuffer(buffer: WebGLBuffer | null): void;
165
+ deleteFramebuffer(framebuffer: WebGLFramebuffer | null): void;
166
+ _deleteLinkable(name: 'deleteProgram', object: WebGLProgram | null, Type: typeof WebGLProgram): void;
167
+ _deleteLinkable(name: 'deleteShader', object: WebGLShader | null, Type: typeof WebGLShader): void;
168
+ deleteProgram(program: WebGLProgram | null): void;
169
+ deleteRenderbuffer(renderbuffer: WebGLRenderbuffer | null): void;
170
+ deleteShader(shader: WebGLShader | null): void;
171
+ deleteTexture(texture: WebGLTexture | null): void;
172
+ depthFunc(func: GLenum): void;
173
+ depthMask(flag: GLboolean): void;
174
+ depthRange(zNear: GLclampf, zFar: GLclampf): void;
175
+ destroy(): void;
176
+ detachShader(program: WebGLProgram, shader: WebGLShader): void;
177
+ disable(cap?: GLenum): void;
178
+ disableVertexAttribArray(index?: GLuint): void;
179
+ drawArrays(mode?: GLenum, first?: GLint, count?: GLsizei): void;
180
+ drawElements(mode?: GLenum, count?: GLsizei, type?: GLenum, ioffset?: GLintptr): void;
181
+ enable(cap?: GLenum): void;
182
+ enableVertexAttribArray(index: GLuint): void;
183
+ finish(): void;
184
+ flush(): void;
185
+ framebufferRenderbuffer(target: GLenum, attachment: GLenum, renderbufferTarget: GLenum, renderbuffer: WebGLRenderbuffer | null): void;
186
+ framebufferTexture2D(target: GLenum, attachment: GLenum, textarget: GLenum, texture: WebGLTexture | null, level?: GLint): void;
187
+ frontFace(mode?: GLenum): void;
188
+ generateMipmap(target?: GLenum): void;
189
+ getActiveAttrib(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null;
190
+ getActiveUniform(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null;
191
+ getAttachedShaders(program: WebGLProgram): WebGLShader[] | null;
192
+ getAttribLocation(program: WebGLProgram, name: string): GLint;
193
+ getBufferParameter(target?: GLenum, pname?: GLenum): any;
194
+ getError(): GLenum;
195
+ setError(error: GLenum): void;
196
+ getFramebufferAttachmentParameter(target?: GLenum, attachment?: GLenum, pname?: GLenum): any;
197
+ getParameter(pname?: GLenum): any;
198
+ getProgramInfoLog(program: WebGLProgram): string | null;
199
+ getProgramParameter(program: WebGLProgram, pname?: GLenum): any;
200
+ getRenderbufferParameter(target?: GLenum, pname?: GLenum): any;
201
+ getShaderInfoLog(shader: WebGLShader): string | null;
202
+ getShaderParameter(shader: WebGLShader, pname?: GLenum): any;
203
+ getShaderPrecisionFormat(shaderType?: GLenum, precisionType?: GLenum): WebGLShaderPrecisionFormat | null;
204
+ getShaderSource(shader: WebGLShader): string | null;
205
+ getSupportedExtensions(): string[];
206
+ _getTexParameterDirect(target?: GLenum, pname?: GLenum): unknown;
207
+ getTexParameter(target?: GLenum, pname?: GLenum): any;
208
+ getUniform(program: WebGLProgram, location: WebGLUniformLocation): any;
209
+ getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation | null;
210
+ getVertexAttrib(index?: GLuint, pname?: GLenum): any;
211
+ getVertexAttribOffset(index?: GLuint, pname?: GLenum): GLintptr;
212
+ hint(target?: GLenum, mode?: GLenum): void;
213
+ isBuffer(buffer: WebGLBuffer): GLboolean;
214
+ isContextLost(): boolean;
215
+ isEnabled(cap?: GLenum): GLboolean;
216
+ isFramebuffer(framebuffer: WebGLShader): GLboolean;
217
+ isProgram(program: WebGLProgram): GLboolean;
218
+ isRenderbuffer(renderbuffer: WebGLRenderbuffer): GLboolean;
219
+ isShader(shader: WebGLShader): GLboolean;
220
+ isTexture(texture: WebGLTexture): GLboolean;
221
+ lineWidth(width: GLfloat): void;
222
+ linkProgram(program: WebGLProgram): void;
223
+ /** The `WebGLRenderingContext.pixelStorei()` method of the WebGL API specifies the pixel storage modes. */
224
+ pixelStorei(pname?: GLenum, param?: GLint | GLboolean): void;
225
+ polygonOffset(factor: GLfloat, units: GLfloat): void;
226
+ renderbufferStorage(target?: GLenum, internalFormat?: GLenum, width?: GLsizei, height?: GLsizei): void;
227
+ resize(width?: number, height?: number): void;
228
+ sampleCoverage(value: GLclampf, invert: GLboolean): void;
229
+ scissor(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;
230
+ shaderSource(shader: WebGLShader, source: string): void;
231
+ stencilFunc(func: GLenum, ref: GLint, mask: GLuint): void;
232
+ stencilFuncSeparate(face: GLenum, func: GLenum, ref: GLint, mask: GLuint): void;
233
+ stencilMask(mask: GLuint): void;
234
+ stencilMaskSeparate(face: GLenum, mask: GLuint): void;
235
+ stencilOp(fail: GLenum, zfail: GLenum, zpass: GLenum): void;
236
+ stencilOpSeparate(face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum): void;
237
+ texParameterf(target: GLenum, pname: GLenum, param: GLfloat): void;
238
+ texParameteri(target?: GLenum, pname?: GLenum, param?: GLint): void;
239
+ uniform1f(location: WebGLUniformLocation | null, x: GLfloat): void;
240
+ uniform1i(location: WebGLUniformLocation | null, x: GLint): void;
241
+ uniform2f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat): void;
242
+ uniform2i(location: WebGLUniformLocation | null, x: GLint, y: GLint): void;
243
+ uniform3f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat): void;
244
+ uniform3i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint): void;
245
+ uniform4f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void;
246
+ uniform4i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint, w: GLint): void;
247
+ useProgram(program: WebGLProgram): void;
248
+ validateProgram(program: WebGLProgram): void;
249
+ vertexAttrib1f(index: GLuint, x: GLfloat): void;
250
+ vertexAttrib1fv(index: GLuint, values: Float32List): void;
251
+ vertexAttrib2f(index: GLuint, x: GLfloat, y: GLfloat): void;
252
+ vertexAttrib2fv(index: GLuint, values: Float32List): void;
253
+ vertexAttrib3f(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat): void;
254
+ vertexAttrib3fv(index: GLuint, values: Float32List): void;
255
+ vertexAttrib4f(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void;
256
+ vertexAttrib4fv(index: GLuint, values: Float32List): void;
257
+ vertexAttribPointer(index?: GLuint, size?: GLint, type?: GLenum, normalized?: GLboolean, stride?: GLsizei, offset?: GLintptr): void;
258
+ viewport(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void;
259
+ }
260
+ export { GjsifyWebGLRenderingContext as WebGLRenderingContext };
@@ -0,0 +1,7 @@
1
+ export declare class GjsifyWebGLShaderPrecisionFormat implements WebGLShaderPrecisionFormat {
2
+ rangeMin: number;
3
+ rangeMax: number;
4
+ precision: number;
5
+ constructor(_: WebGLShaderPrecisionFormat);
6
+ }
7
+ export { GjsifyWebGLShaderPrecisionFormat as WebGLShaderPrecisionFormat };
@@ -0,0 +1,12 @@
1
+ import { Linkable } from './linkable.js';
2
+ import type { GjsifyWebGLRenderingContext } from './webgl-rendering-context.js';
3
+ export declare class GjsifyWebGLShader extends Linkable implements WebGLShader {
4
+ _type: GLenum;
5
+ _ctx: GjsifyWebGLRenderingContext;
6
+ _source: string;
7
+ _compileStatus: boolean;
8
+ _compileInfo: string;
9
+ constructor(_: WebGLShader & number, ctx: GjsifyWebGLRenderingContext, type: GLenum);
10
+ _performDelete(): void;
11
+ }
12
+ export { GjsifyWebGLShader as WebGLShader };
@@ -0,0 +1,10 @@
1
+ import type { GjsifyWebGLRenderingContext } from './webgl-rendering-context.js';
2
+ import type { WebGLTexture } from './webgl-texture.js';
3
+ export declare class WebGLTextureUnit {
4
+ _ctx: GjsifyWebGLRenderingContext;
5
+ _idx: number;
6
+ _mode: number;
7
+ _bind2D: WebGLTexture | null;
8
+ _bindCube: WebGLTexture | null;
9
+ constructor(ctx: GjsifyWebGLRenderingContext, idx: number);
10
+ }
@@ -0,0 +1,14 @@
1
+ import { Linkable } from './linkable.js';
2
+ import type { GjsifyWebGLRenderingContext } from './webgl-rendering-context.js';
3
+ export declare class GjsifyWebGLTexture extends Linkable implements WebGLTexture {
4
+ _ctx: GjsifyWebGLRenderingContext;
5
+ _binding: number;
6
+ _levelWidth: Int32Array;
7
+ _levelHeight: Int32Array;
8
+ _format: number;
9
+ _type: number;
10
+ _complete: boolean;
11
+ constructor(_: WebGLTexture & number, ctx: GjsifyWebGLRenderingContext);
12
+ _performDelete(): void;
13
+ }
14
+ export { GjsifyWebGLTexture as WebGLTexture };
@@ -0,0 +1,18 @@
1
+ import type { WebGLProgram } from './webgl-program.js';
2
+ export declare class GjsifyWebGLUniformLocation implements WebGLUniformLocation {
3
+ _: WebGLUniformLocation & number;
4
+ _program: WebGLProgram;
5
+ _linkCount: number;
6
+ _activeInfo: {
7
+ size: GLsizei;
8
+ type: GLenum;
9
+ name: string;
10
+ };
11
+ _array: Array<number | null> | null;
12
+ constructor(_: WebGLUniformLocation & number, program: WebGLProgram, info: {
13
+ size: GLsizei;
14
+ type: GLenum;
15
+ name: string;
16
+ });
17
+ }
18
+ export { GjsifyWebGLUniformLocation as WebGLUniformLocation };
@@ -0,0 +1,38 @@
1
+ import { WebGLBuffer } from './webgl-buffer.js';
2
+ import type { GjsifyWebGLRenderingContext } from './webgl-rendering-context.js';
3
+ export declare class WebGLVertexArrayObjectAttribute {
4
+ _ctx: GjsifyWebGLRenderingContext;
5
+ _idx: number;
6
+ _isPointer: boolean;
7
+ _pointerBuffer: WebGLBuffer | null;
8
+ _pointerOffset: number;
9
+ _pointerSize: number;
10
+ _pointerStride: number;
11
+ _pointerType: number;
12
+ _pointerNormal: boolean;
13
+ _divisor: number;
14
+ _inputSize: number;
15
+ _inputStride: number;
16
+ constructor(ctx: GjsifyWebGLRenderingContext, idx: number);
17
+ _clear(): void;
18
+ }
19
+ export declare class WebGLVertexArrayGlobalAttribute {
20
+ _idx: number;
21
+ _data: Float32Array;
22
+ constructor(idx: number);
23
+ }
24
+ export declare class WebGLVertexArrayObjectState {
25
+ _attribs: WebGLVertexArrayObjectAttribute[];
26
+ _elementArrayBufferBinding: WebGLBuffer | null;
27
+ constructor(ctx: GjsifyWebGLRenderingContext);
28
+ setElementArrayBuffer(buffer: WebGLBuffer | null): void;
29
+ cleanUp(): void;
30
+ releaseArrayBuffer(buffer: WebGLBuffer): void;
31
+ setVertexAttribPointer(buffer: WebGLBuffer, index: number, pointerSize: number, pointerOffset: number, pointerStride: number, pointerType: number, pointerNormal: boolean, inputStride: number, inputSize: number): void;
32
+ }
33
+ export declare class WebGLVertexArrayGlobalState {
34
+ _arrayBufferBinding: WebGLBuffer | null;
35
+ _attribs: WebGLVertexArrayGlobalAttribute[];
36
+ constructor(ctx: GjsifyWebGLRenderingContext);
37
+ setArrayBuffer(buffer: WebGLBuffer | null): void;
38
+ }
package/meson.build ADDED
@@ -0,0 +1,39 @@
1
+ project('Gwebgl', ['c', 'vala'], version: '0.1')
2
+
3
+ root_dir = meson.current_source_dir()
4
+
5
+ vapi_dir = root_dir / 'src/vapi'
6
+
7
+ add_project_arguments(
8
+ [
9
+ '--vapidir', vapi_dir,
10
+ ],
11
+ language: 'vala'
12
+ )
13
+
14
+ dependencies = [ dependency('glib-2.0'), dependency('gobject-2.0'), dependency('gdk-pixbuf-2.0'), dependency('gtk4'), dependency('epoxy')]
15
+
16
+ sources = files('src/vala/handle-types.vala', 'src/vala/webgl-rendering-context-base.vala', 'src/vala/webgl-rendering-context.vala')
17
+
18
+ libGwebgl = library('gwebgl', sources,
19
+ dependencies: dependencies,
20
+ vala_gir: meson.project_name() + '-0.1.gir',
21
+ install: true,
22
+ install_dir: [true, true, true, true]
23
+ )
24
+
25
+ g_ir_compiler = find_program('g-ir-compiler')
26
+
27
+
28
+ # TODO not working if gwebgl-0.1.gir not exists
29
+ custom_target(meson.project_name() + '-0.1.typelib', command: [g_ir_compiler, '--shared-library', 'libgwebgl.so', '--output', '@OUTPUT@', meson.current_build_dir() / meson.project_name() + '-0.1.gir'],
30
+ #input: meson.current_build_dir() / meson.project_name() + '-0.1.gir',
31
+ output: meson.project_name() +'-0.1.typelib',
32
+ depends: libGwebgl,
33
+ install: true,
34
+ install_dir: get_option('libdir') / 'girepository-1.0')
35
+
36
+
37
+ # Test app
38
+ test_sources = files('src/vala/handle-types.vala', 'src/vala/webgl-rendering-context-base.vala', 'src/vala/webgl-rendering-context.vala', 'src/test/app.vala')
39
+ executable('gwebgl_vala_app', test_sources, dependencies: dependencies)
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@gjsify/webgl",
3
+ "version": "0.0.2",
4
+ "description": "WebGL module for Gjs",
5
+ "main": "lib/cjs/index.js",
6
+ "module": "lib/esm/index.js",
7
+ "types": "lib/types/index.d.ts",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./lib/types/index.d.ts",
13
+ "default": "./lib/esm/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./lib/types/index.d.ts",
17
+ "default": "./lib/cjs/index.js"
18
+ }
19
+ }
20
+ },
21
+ "scripts": {
22
+ "clear": "rm -rf lib tmp build test.gjs.js tsconfig.tsbuildinfo",
23
+ "print:name": "echo '@gjsify/webgl'",
24
+ "init:meson": "meson setup build .",
25
+ "init:meson:wipe": "yarn init:meson --wipe",
26
+ "build": "yarn print:name && yarn build:meson && yarn build:gjsify && yarn build:types",
27
+ "build:gjsify": "gjsify build --library 'src/ts/**/*.{ts,js}'",
28
+ "build:meson": "yarn init:meson && meson compile -C build",
29
+ "build:types": "tsc --project tsconfig.types.json || exit 0",
30
+ "build:test": "gjsify build src/ts/test.ts --app gjs --outfile test.gjs.js",
31
+ "test": "yarn print:name && yarn build:gjsify && yarn build:test && yarn test:gjs",
32
+ "test:gjs": "LD_LIBRARY_PATH=build GI_TYPELIB_PATH=build gjs -m test.gjs.js"
33
+ },
34
+ "keywords": [
35
+ "gjs",
36
+ "WebGL"
37
+ ],
38
+ "devDependencies": {
39
+ "@gjsify/cli": "^0.0.2",
40
+ "@gjsify/unit": "^0.0.2",
41
+ "@types/node": "^20.3.1",
42
+ "typescript": "^5.1.3"
43
+ },
44
+ "dependencies": {
45
+ "@girs/gio-2.0": "2.76.1-3.1.0",
46
+ "@girs/gjs": "^3.1.0",
47
+ "@girs/gtk-4.0": "4.10.4-3.1.0",
48
+ "@girs/gwebgl-0.1": "^0.1.0-3.1.0",
49
+ "@gjsify/html-image-element": "^0.0.2",
50
+ "@gjsify/utils": "^0.0.2",
51
+ "@types/bit-twiddle": "^1.0.1",
52
+ "bit-twiddle": "^1.0.2",
53
+ "glsl-tokenizer": "^2.1.5"
54
+ }
55
+ }
@@ -0,0 +1,60 @@
1
+ using Gtk;
2
+ using Gwebgl;
3
+
4
+ int main (string[] argv) {
5
+ WebGLRenderingContext? gl = null;
6
+ // Create a new application
7
+ var app = new Gtk.Application ("gjsify.web.webgl.valaapp", GLib.ApplicationFlags.FLAGS_NONE);
8
+ app.activate.connect (() => {
9
+ var win = new Gtk.ApplicationWindow (app);
10
+ win.set_default_size(800, 600);
11
+ var glarea = new Gtk.GLArea ();
12
+ glarea.set_use_es(true);
13
+ glarea.set_required_version(3, 2);
14
+
15
+ glarea.realize.connect((widget) => {
16
+ print("\nrealize");
17
+ glarea.make_current ();
18
+
19
+ var error = glarea.get_error ();
20
+ if(error != null) {
21
+ printerr (error.message);
22
+ return;
23
+ }
24
+ });
25
+
26
+ glarea.render.connect((context) => {
27
+ print("\nrender");
28
+
29
+ var error = glarea.get_error ();
30
+ if(error != null) {
31
+ printerr (error.message);
32
+ return false;
33
+ }
34
+
35
+ if(gl == null) {
36
+ int width = glarea.get_width ();
37
+ int height = glarea.get_height ();
38
+ gl = new Gwebgl.WebGLRenderingContext (width, height, true, true, false, false, true, false, false, false);
39
+ }
40
+ // Set clear color to black, fully opaque
41
+ gl.clearColor((float) 1.0, (float) 0.0, (float) 0.0, (float) 1.0);
42
+
43
+ // GL.glClearColor((GL.GLfloat) 0.0, (GL.GLfloat) 0.0, (GL.GLfloat) 0.0, (GL.GLfloat) 1.0);
44
+
45
+ // Clear the color buffer with specified clear color
46
+ var COLOR_BUFFER_BIT = gl.get_webgl_constants().get ("COLOR_BUFFER_BIT");
47
+ gl.clear(COLOR_BUFFER_BIT);
48
+ // GL.glClear(GL.GL_COLOR_BUFFER_BIT);
49
+ print("GL.GL_COLOR_BUFFER_BIT %i", GL.GL_COLOR_BUFFER_BIT);
50
+ print("COLOR_BUFFER_BIT %i", COLOR_BUFFER_BIT);
51
+ return true;
52
+ });
53
+
54
+ win.set_child (glarea);
55
+ win.present ();
56
+ });
57
+
58
+ app.run (argv);
59
+ return 0;
60
+ }
@@ -0,0 +1,18 @@
1
+ declare module 'glsl-tokenizer/string' {
2
+
3
+ export interface Options {
4
+ version: '100' | '300 es';
5
+ }
6
+
7
+ export type TokenType = 'block-comment' | 'line-comment' | 'preprocessor' | 'operator' | 'float' | 'ident' | 'builtin' | 'eof' | 'integer' | 'whitespace' | 'keyword';
8
+
9
+ export interface Token {
10
+ type: TokenType;
11
+ data: string;
12
+ position: number;
13
+ line: number;
14
+ column: number;
15
+ }
16
+
17
+ export default function tokenString(src: string, opt?: Options): Token[];
18
+ }