@Override public void glActiveTexture (int texture) { gl.activeTexture(texture); }
public static WebGLProgram createShaderProgram (WebGLRenderingContext gl, String vertexSource, String fragmentSource) { WebGLShader vertexShader = getShader(gl, VERTEX_SHADER, vertexSource); WebGLShader fragmentShader = getShader(gl, FRAGMENT_SHADER, fragmentSource); WebGLProgram shaderProgram = gl.createProgram(); gl.attachShader(shaderProgram, fragmentShader); gl.attachShader(shaderProgram, vertexShader); gl.linkProgram(shaderProgram); if (!gl.getProgramParameterb(shaderProgram, LINK_STATUS)) { throw new RuntimeException("Could not initialize shaders"); } return shaderProgram; }
@Override public void glBindBuffer (int target, int buffer) { gl.bindBuffer(target, buffers.get(buffer)); }
private void drawQuad() { // Use the sole shader program. gl.useProgram(shaderProgram); // Projection matrix. WebGLUniformLocation pUniform = gl.getUniformLocation(shaderProgram, "projectionMatrix"); gl.uniformMatrix4fv(pUniform, false, projectionMatrix); // Model View matrix. WebGLUniformLocation mvUniform = gl.getUniformLocation(shaderProgram, "modelViewMatrix"); gl.uniformMatrix4fv(mvUniform, false, modelViewMatrix); // Bird texture. gl.activeTexture(TEXTURE0); gl.uniform1i(gl.getUniformLocation(shaderProgram, "texture"), 0); // Vertices (position, texCoord) gl.bindBuffer(ARRAY_BUFFER, buffer); int vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "vertexPosition"); gl.vertexAttribPointer(vertexPositionAttribute, 3, FLOAT, false, 0, 0); gl.enableVertexAttribArray(vertexPositionAttribute); int texCoordAttribute = gl.getAttribLocation(shaderProgram, "texCoord"); gl.vertexAttribPointer(texCoordAttribute, 2, FLOAT, false, 0, 12 * Float32Array.BYTES_PER_ELEMENT); gl.enableVertexAttribArray(texCoordAttribute); // Elements. gl.bindBuffer(ELEMENT_ARRAY_BUFFER, indexBuffer); gl.drawArrays(TRIANGLE_STRIP, 0, 4); }
private WebGLFramebuffer createFramebuffer(int width, int height) { WebGLTexture tex = createTexture(); fbuf = gl.createFramebuffer(); gl.texImage2D(TEXTURE_2D, 0, RGBA, width, height, 0, RGBA, UNSIGNED_BYTE, null); WebGLRenderbuffer rbuf = gl.createRenderbuffer(); gl.bindRenderbuffer(RENDERBUFFER, rbuf); gl.renderbufferStorage(RENDERBUFFER, RGBA4, width, height); gl.framebufferTexture2D(FRAMEBUFFER, COLOR_ATTACHMENT0, TEXTURE_2D, tex, 0); gl.framebufferRenderbuffer(FRAMEBUFFER, DEPTH_ATTACHMENT, RENDERBUFFER, rbuf); gl.bindTexture(TEXTURE_2D, null); gl.bindRenderbuffer(RENDERBUFFER, null); gl.bindFramebuffer(FRAMEBUFFER, null); return fbuf; }
private void drawToFramebuffer() { gl.bindFramebuffer(FRAMEBUFFER, fbuf); gl.clear(COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT); gl.bindTexture(TEXTURE_2D, birdTexture); drawQuad(); gl.bindTexture(TEXTURE_2D, null); gl.bindFramebuffer(FRAMEBUFFER, null); }
private void initVertexBuffer() { buffer = gl.createBuffer(); gl.bindBuffer(ARRAY_BUFFER, buffer); gl.bufferData(ARRAY_BUFFER, (12 + 8) * Float32Array.BYTES_PER_ELEMENT, STATIC_DRAW); 42/2f,42/2f,z, }; gl.bufferSubData(ARRAY_BUFFER, 0, ArrayUtils.createFloat32Array(positions)); 1.0f, 0.0f, }; gl.bufferSubData(ARRAY_BUFFER, 12 * Float32Array.BYTES_PER_ELEMENT, ArrayUtils.createFloat32Array(texCoords)); indexBuffer = gl.createBuffer(); gl.bindBuffer(ELEMENT_ARRAY_BUFFER, indexBuffer); gl.bufferData(ELEMENT_ARRAY_BUFFER, ArrayUtils.createInt32Array(indices), STREAM_DRAW);
private void init() { gl.clearColor(0.0f, 0.0f, 0.0f, 1.0f); gl.enable(TEXTURE_2D); gl.enable(BLEND); gl.blendFunc(SRC_ALPHA, ONE_MINUS_SRC_ALPHA);
@Override public void glDrawElements(int mode, int count, int type, Buffer indices) { prepareDraw(); if (boundElementArrayBuffer != elementBuffer) { gl.bindBuffer(ELEMENT_ARRAY_BUFFER, elementBuffer); boundElementArrayBuffer = elementBuffer; } gl.bufferData(ELEMENT_ARRAY_BUFFER, getTypedArray(indices, type, count * getTypeSize(type)), STREAM_DRAW); // if ("ModelPart".equals(debugInfo)) { // HtmlPlatform.log.info("drawElements f. ModelPart; count: " + count); // } gl.drawElements(mode, count, type, 0); }
private WebGLTexture createTexture() { WebGLTexture tex = gl.createTexture(); gl.bindTexture(TEXTURE_2D, tex); gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, LINEAR); gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, LINEAR); gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE); gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE); return tex; }
@Override public void onEvent(NativeEvent e) { // Load image data into the texture object once it's loaded. gl.bindTexture(TEXTURE_2D, tex); gl.texImage2D(TEXTURE_2D, 0, RGBA, RGBA, UNSIGNED_BYTE, img); gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, LINEAR); gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, LINEAR); gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE); gl.texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE); gl.bindTexture(TEXTURE_2D, null); } });
@Override public void glBufferData(int target, int byteSize, Buffer data, int usage) { if (target == GL_ARRAY_BUFFER) { if (requestedArrayBuffer != boundArrayBuffer) { gl.bindBuffer(target, requestedArrayBuffer); boundArrayBuffer = requestedArrayBuffer; } } else if (target == GL_ELEMENT_ARRAY_BUFFER) { if (requestedElementArrayBuffer != boundElementArrayBuffer) { gl.bindBuffer(target, requestedElementArrayBuffer); boundElementArrayBuffer = requestedElementArrayBuffer; } } gl.bufferData(target, getTypedArray(data, GL_BYTE, byteSize), usage); }
@Override public void glDrawElements(int mode, int count, int type, int indices) { prepareDraw(); if (requestedElementArrayBuffer != boundElementArrayBuffer) { gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, requestedElementArrayBuffer); boundElementArrayBuffer = requestedElementArrayBuffer; } gl.drawElements(mode, count, type, indices); }
@Override public void glVertexAttribPointer(int indx, int size, int type, boolean normalized, int stride, int ptr) { useNioBuffer &= ~(1 << indx); if (boundArrayBuffer != requestedArrayBuffer) { gl.bindBuffer(GL_ARRAY_BUFFER, requestedArrayBuffer); boundArrayBuffer = requestedArrayBuffer; } gl.vertexAttribPointer(indx, size, type, normalized, stride, ptr); }
@Override public void glAttachShader (int program, int shader) { WebGLProgram glProgram = programs.get(program); WebGLShader glShader = shaders.get(shader); gl.attachShader(glProgram, glShader); }
@Override public void glBindRenderbuffer (int target, int renderbuffer) { gl.bindRenderbuffer(target, renderBuffers.get(renderbuffer)); }
@Override public void glClearColor (float red, float green, float blue, float alpha) { gl.clearColor(red, green, blue, alpha); }
@Override public void glBlendFunc (int sfactor, int dfactor) { gl.blendFunc(sfactor, dfactor); }
@Override public void glClear (int mask) { gl.clear(mask); }
@Override public void glBindFramebuffer (int target, int framebuffer) { gl.bindFramebuffer(target, frameBuffers.get(framebuffer)); }