Lines Matching refs:gl
4 export default GLWrap('WebGL2 - Transform feedback', async (gl) => {
74 const vert = gl.createShader(gl.VERTEX_SHADER)!;
75 gl.shaderSource(vert, vertexSource);
76 gl.compileShader(vert);
78 const frag = gl.createShader(gl.FRAGMENT_SHADER)!;
79 gl.shaderSource(frag, fragmentSource);
80 gl.compileShader(frag);
82 const program = gl.createProgram()!;
83 gl.attachShader(program, vert);
84 gl.attachShader(program, frag);
91 gl.transformFeedbackVaryings(program, varyings, gl.SEPARATE_ATTRIBS);
92 gl.linkProgram(program);
95 const drawTimeLocation = gl.getUniformLocation(program, 'u_time');
96 const drawAccelerationLocation = gl.getUniformLocation(program, 'u_acceleration');
97 const drawColorLocation = gl.getUniformLocation(program, 'u_color');
117 const particleVAOs = [gl.createVertexArray(), gl.createVertexArray()];
120 const particleTransformFeedbacks = [gl.createTransformFeedback(), gl.createTransformFeedback()];
127 gl.bindVertexArray(particleVAOs[i]!);
129 particleVBOs[i][POSITION_LOCATION] = gl.createBuffer();
130 gl.bindBuffer(gl.ARRAY_BUFFER, particleVBOs[i][POSITION_LOCATION]);
131 gl.bufferData(gl.ARRAY_BUFFER, particlePositions, gl.STREAM_COPY);
132 gl.vertexAttribPointer(POSITION_LOCATION, 2, gl.FLOAT, false, 0, 0);
133 gl.enableVertexAttribArray(POSITION_LOCATION);
135 particleVBOs[i][VELOCITY_LOCATION] = gl.createBuffer();
136 gl.bindBuffer(gl.ARRAY_BUFFER, particleVBOs[i][VELOCITY_LOCATION]);
137 gl.bufferData(gl.ARRAY_BUFFER, particleVelocities, gl.STREAM_COPY);
138 gl.vertexAttribPointer(VELOCITY_LOCATION, 2, gl.FLOAT, false, 0, 0);
139 gl.enableVertexAttribArray(VELOCITY_LOCATION);
141 particleVBOs[i][SPAWNTIME_LOCATION] = gl.createBuffer();
142 gl.bindBuffer(gl.ARRAY_BUFFER, particleVBOs[i][SPAWNTIME_LOCATION]);
143 gl.bufferData(gl.ARRAY_BUFFER, particleSpawntime, gl.STREAM_COPY);
144 gl.vertexAttribPointer(SPAWNTIME_LOCATION, 1, gl.FLOAT, false, 0, 0);
145 gl.enableVertexAttribArray(SPAWNTIME_LOCATION);
147 particleVBOs[i][LIFETIME_LOCATION] = gl.createBuffer();
148 gl.bindBuffer(gl.ARRAY_BUFFER, particleVBOs[i][LIFETIME_LOCATION]);
149 gl.bufferData(gl.ARRAY_BUFFER, particleLifetime, gl.STREAM_COPY);
150 gl.vertexAttribPointer(LIFETIME_LOCATION, 1, gl.FLOAT, false, 0, 0);
151 gl.enableVertexAttribArray(LIFETIME_LOCATION);
153 particleVBOs[i][ID_LOCATION] = gl.createBuffer();
154 gl.bindBuffer(gl.ARRAY_BUFFER, particleVBOs[i][ID_LOCATION]);
155 gl.bufferData(gl.ARRAY_BUFFER, particleIDs, gl.STATIC_READ);
156 gl.vertexAttribPointer(ID_LOCATION, 1, gl.FLOAT, false, 0, 0);
157 gl.enableVertexAttribArray(ID_LOCATION);
159 gl.bindBuffer(gl.ARRAY_BUFFER, null);
162 gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, particleTransformFeedbacks[i]);
163 gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, particleVBOs[i][POSITION_LOCATION]);
164 gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 1, particleVBOs[i][VELOCITY_LOCATION]);
165 gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 2, particleVBOs[i][SPAWNTIME_LOCATION]);
166 gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 3, particleVBOs[i][LIFETIME_LOCATION]);
169 gl.useProgram(program);
170 gl.uniform4f(drawColorLocation, 0.0, 1.0, 1.0, 1.0);
171 gl.uniform2f(drawAccelerationLocation, 0.0, ACCELERATION);
173 gl.enable(gl.BLEND);
174 gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
182 gl.clearColor(0.0, 0.0, 0.0, 1.0);
183 gl.clear(gl.COLOR_BUFFER_BIT);
188 gl.bindVertexArray(sourceVAO);
189 gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, destinationTransformFeedback);
192 gl.uniform1f(drawTimeLocation, time);
195 gl.beginTransformFeedback(gl.POINTS);
196 gl.drawArrays(gl.POINTS, 0, NUM_PARTICLES);
197 gl.endTransformFeedback();
198 gl.endFrameEXP();