/** *************************** GL FUNCTIONS ************************** */ @TargetApi(8) private void setLight(int _program) { // rotate the light? if (lightRotate) { angle += 0.000005f; if (angle >= 6.2) angle = 0.0f; // rotate light about y-axis float newPosX = (float) (Math.cos(angle) * lightPos[0] - Math.sin(angle) * lightPos[2]); float newPosZ = (float) (Math.sin(angle) * lightPos[0] + Math.cos(angle) * lightPos[2]); lightPos[0] = newPosX; lightPos[2] = newPosZ; } // lighting variables // send to shaders GLES20.glUniform4fv(GLES20.glGetUniformLocation(_program, "lightPos"), 1, lightPos, 0); GLES20.glUniform4fv(GLES20.glGetUniformLocation(_program, "lightColor"), 1, lightColor, 0); // material GLES20.glUniform4fv(GLES20.glGetUniformLocation(_program, "matAmbient"), 1, matAmbient, 0); GLES20.glUniform4fv(GLES20.glGetUniformLocation(_program, "matDiffuse"), 1, matDiffuse, 0); GLES20.glUniform4fv(GLES20.glGetUniformLocation(_program, "matSpecular"), 1, matSpecular, 0); GLES20.glUniform1f(GLES20.glGetUniformLocation(_program, "matShininess"), matShininess); }
@Override public void applyParams() { super.applyParams(); GLES20.glUniform4fv(muToonColor0Handle, 1, mToonColor0, 0); GLES20.glUniform4fv(muToonColor1Handle, 1, mToonColor1, 0); GLES20.glUniform4fv(muToonColor2Handle, 1, mToonColor2, 0); GLES20.glUniform4fv(muToonColor3Handle, 1, mToonColor3, 0); }
public void draw() { // Add program to OpenGL environment GLES20.glUseProgram(mProgram); // get handle to vertex shader's vPosition member mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); // Enable a handle to the scene vertices GLES20.glEnableVertexAttribArray(mPositionHandle); // Prepare the scene coordinate data GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, VERTEX_STRIDE, vertexBuffer); // get handle to fragment shader's vColor member mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); // Set colorVertices for drawing the scene GLES20.glUniform4fv(mColorHandle, 1, colorVertices, 0); // Get handle to shape's transformation matrix int mtrxhandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); // Apply the projection and view transformation GLES20.glUniformMatrix4fv(mtrxhandle, 1, false, pointsRenderer.mtrxProjectionAndView, 0); // Draw the scene GLES20.glDrawArrays(GLES20.GL_POINTS, 0, vertexCount); // Disable vertex array GLES20.glDisableVertexAttribArray(mPositionHandle); if (drawLines) { GLES20.glUseProgram(mLinesProgram); mLinesPositionHandle = GLES20.glGetAttribLocation(mLinesProgram, "vPosition"); GLES20.glEnableVertexAttribArray(mLinesPositionHandle); // Prevent null pointer race condition if (linesVertexBuffer != null) { GLES20.glVertexAttribPointer( mLinesPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, VERTEX_STRIDE, linesVertexBuffer); mLinesColorHandle = GLES20.glGetUniformLocation(mLinesProgram, "vColor"); GLES20.glUniform4fv(mLinesColorHandle, 1, colorLines, 0); int mtrxLineshandle = GLES20.glGetUniformLocation(mLinesProgram, "uMVPMatrix"); GLES20.glUniformMatrix4fv( mtrxLineshandle, 1, false, pointsRenderer.mtrxProjectionAndView, 0); // GLES20.glDrawArrays(GLES20.GL_LINE_STRIP, 0, linesVertexCount); // GLES20.glDrawArrays(GLES20.GL_LINES, 0, linesVertexCount); // GLES20.glDrawArrays(GLES20.GL_LINE_LOOP, 0, linesVertexCount); // GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, linesVertexCount); GLES20.glDrawArrays(renderMethod, 0, linesVertexCount); GLES20.glDisableVertexAttribArray(mLinesPositionHandle); } } }
public void draw() { // Add program to OpenGLES environment GLES20.glUseProgram(mProgram); // get handle to vertex shader's vPosition member mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); // Enable a handle to the triangle vertices GLES20.glEnableVertexAttribArray(mPositionHandle); // Prepare the triangle coordinate data GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, mVertexStride, mVertexBuffer); // get handle to fragment shader's vColor member mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); // set color for drawing the triangle GLES20.glUniform4fv(mColorHandle, 1, mColor, 0); // draw the triangle GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, mVertexCount); // disable vertex array GLES20.glDisableVertexAttribArray(mPositionHandle); }
public void draw(float[] mvpMatrix) { // Add program to OpenGL environment GLES20.glUseProgram(mProgram); // get handle to vertex shader's vPosition member mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); // Enable a handle to the triangle vertices GLES20.glEnableVertexAttribArray(mPositionHandle); // Prepare the triangle coordinate data GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); // get handle to fragment shader's vColor member mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); // Set color for drawing the triangle GLES20.glUniform4fv(mColorHandle, 1, color, 0); // get handle to shape's transformation matrix mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); MyGLRenderer.checkGlError("glGetUniformLocation"); // Apply the projection and view transformation GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); MyGLRenderer.checkGlError("glUniformMatrix4fv"); // Draw the square GLES20.glDrawElements( GLES20.GL_TRIANGLES, drawOrder.length, GLES20.GL_UNSIGNED_SHORT, drawListBuffer); // Disable vertex array GLES20.glDisableVertexAttribArray(mPositionHandle); }
public void init() { float[] vertex = genVertex(n, radius); GLES20.glGenBuffers(vbo.length, vbo, 0); vertexBuffer.position(0); vertexBuffer.put(vertex).position(0); GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vbo[0]); GLES20.glBufferData( GLES20.GL_ARRAY_BUFFER, BYTE_PER_FLOAT * vertex.length, vertexBuffer, GLES20.GL_STATIC_DRAW); GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0); short[][] index = genIndex(n); GLES20.glGenBuffers(ibo.length, ibo, 0); for (int i = 0; i < 3; i++) { indexBuffer.position(0); indexBuffer.put(index[i]).position(0); GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, ibo[i]); GLES20.glBufferData( GLES20.GL_ELEMENT_ARRAY_BUFFER, BYTE_PER_SHORT * index[i].length, indexBuffer, GLES20.GL_STATIC_DRAW); GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, 0); } GLES20.glUniform4fv(mColorHandle, 1, color, 0); }
public void draw() { // 将program加入OpenGL ES环境中 GLES20.glUseProgram(mProgram); // 获取指向vertex shader的成员vPosition的 handle mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); // 启用一个指向三角形的顶点数组的handle GLES20.glEnableVertexAttribArray(mPositionHandle); // 准备三角形的坐标数据 GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); // 获取指向fragment shader的成员vColor的handle mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); // 设置三角形的颜色 GLES20.glUniform4fv(mColorHandle, 1, color, 0); // 画三角形 GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount); // 禁用指向三角形的顶点数组 GLES20.glDisableVertexAttribArray(mPositionHandle); }
public void draw(float[] mvpMatrix) { // Add program to OpenGL ES environment GLES20.glUseProgram(mProgram); // get handle to vertex shader's vPosition member mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); // Enable a handle to the triangle vertices GLES20.glEnableVertexAttribArray(mPositionHandle); // Prepare the triangle coordinate data GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); // get handle to fragment shader's vColor member mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); // Set color for drawing the triangle GLES20.glUniform4fv(mColorHandle, 1, color, 0); // get handle to shape's transformation matrix mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); // Pass the projection and view transformation to the shader GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); // Draw the triangle GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount); // Disable vertex array GLES20.glDisableVertexAttribArray(mPositionHandle); }
public void draw(float[] mvpMatrix) { GLES20.glUseProgram(mProgram); mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); GLES20.glEnableVertexAttribArray(mPositionHandle); GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); GLES20.glUniform4fv(mColorHandle, 1, color, 0); mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); checkGlError("glGetUniformLocation"); GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); checkGlError("glUniformMatrix4fv"); GLES20.glDrawArrays(GLES20.GL_LINES, 0, vertexCount); GLES20.glDisableVertexAttribArray(mPositionHandle); }
public void draw(float[] mvp, float x, float y) { float[] mvpMatrix = new float[16]; System.arraycopy(mvp, 0, mvpMatrix, 0, 16); Matrix.setIdentityM(transMatrix, 0); // glBase.translate(transMatrix, x, y, 0); Matrix.multiplyMM(mvpMatrix, 0, transMatrix, 0, mvpMatrix, 0); GLES20.glUseProgram(mProgram); mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); GLES20.glEnableVertexAttribArray(mPositionHandle); GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); GLES20.glUniform4fv(mColorHandle, 1, color, 0); mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); checkGlError("glGetUniformLocation"); GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); checkGlError("glUniformMatrix4fv"); GLES20.glDrawArrays(GLES20.GL_LINE_LOOP, 0, vertexCount); GLES20.glDisableVertexAttribArray(mPositionHandle); }
@Override public void glUniform4fv(int location, int count, FloatBuffer v) { GLES20.glUniform4fv(location, count, v); }
@Override public void glUniform4fv(int location, int count, float[] v, int offset) { GLES20.glUniform4fv(location, count, v, offset); }
/** * drawing function also calculates color value * * @param mvpMatrix */ public void draw(float[] mvpMatrix) { float dif = Math.abs(midx - midTx) + Math.abs(midy - midTy) + Math.abs(sizx - sizTx) + Math.abs(sizy - sizTy); // Log.d("ASCII","dif"+dif); if (dif > 0.01) { midx += (midTx - midx) / 10.0f; midy += (midTy - midy) / 10.0f; sizx += (sizTx - sizx) / 10.0f; sizy += (sizTy - sizy) / 10.0f; } // color[0]= recBlink; // color[1]=1.0f-recBlink/5; // color[2]=1.0f-recBlink/5; GLES20.glUseProgram(mProgram); // get handle to vertex shader's vPosition member mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); // get handle to fragment shader's vColor member mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); // get handle to texture coordinate variable mTextureHandle = GLES20.glGetAttribLocation(mProgram, "TexCoordIn"); // if (mTextureHandle == -1) Log.e("ASCII", "TexCoordIn not found"); // get handle to shape's texture reference fsTexture = GLES20.glGetUniformLocation(mProgram, "Texture"); // if (fsTexture == -1) Log.e("ASCII", "Texture not found"); // GLES20.glUniform4fv(mColorHandle, 1, color, 0); // get handle to shape's transformation matrix mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); // XQGLRenderer.checkGlError("glGetUniformLocation"); // Apply the projection and view transformation GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); // MyGLRenderer.checkGlError("glUniformMatrix4fv"); // GLES20.glEnableVertexAttribArray(mPositionHandle); // GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); GLES20.glVertexAttribPointer( mTextureHandle, COORDS_PER_TEXTURE, GLES20.GL_FLOAT, false, textureStride, textureBuffer); GLES20.glActiveTexture(GLES20.GL_TEXTURE3); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureRef); GLES20.glUniform1i(fsTexture, 3); // GLES20.glEnableVertexAttribArray(mPositionHandle); GLES20.glEnableVertexAttribArray(mTextureHandle); GLES20.glEnable(GLES20.GL_BLEND); GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); // Draw the shape GLES20.glDrawElements( GLES20.GL_TRIANGLE_STRIP, drawOrder.length, GLES20.GL_UNSIGNED_SHORT, indexBuffer); GLES20.glDisable(GLES20.GL_BLEND); // Disable vertex array GLES20.glDisableVertexAttribArray(mPositionHandle); GLES20.glDisableVertexAttribArray(mTextureHandle); }
public void draw(float[] mvMatrix, float[] pMatrix) { float[] normalMatrix = new float[16]; float[] tmpMatrix = new float[16]; Matrix.invertM(tmpMatrix, 0, mvMatrix, 0); Matrix.transposeM(normalMatrix, 0, tmpMatrix, 0); // Add program to OpenGL ES environment GLES20.glUseProgram(shaderProgram); // vertex position attribute array int mPositionHandle = GLES20.glGetAttribLocation(shaderProgram, "vPosition"); GLES20.glEnableVertexAttribArray(mPositionHandle); GLES20.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); // vertex normal attribute array int mNormalHandle = GLES20.glGetAttribLocation(shaderProgram, "vNormal"); GLES20.glEnableVertexAttribArray(mNormalHandle); GLES20.glVertexAttribPointer( mNormalHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, normalBuffer); // vertex UV attribute array int mUVHandle = GLES20.glGetAttribLocation(shaderProgram, "vTexCoord"); GLES20.glEnableVertexAttribArray(mUVHandle); GLES20.glVertexAttribPointer(mUVHandle, 2, GLES20.GL_FLOAT, false, 8, uvBuffer); // material data int mColorHandle = GLES20.glGetUniformLocation(shaderProgram, "Color"); int mAmbientHandle = GLES20.glGetUniformLocation(shaderProgram, "Ambient"); int mDiffuseHandle = GLES20.glGetUniformLocation(shaderProgram, "Diffuse"); int mSpecularHandle = GLES20.glGetUniformLocation(shaderProgram, "Specular"); int mShininessHandle = GLES20.glGetUniformLocation(shaderProgram, "Shininess"); GLES20.glUniform4fv(mColorHandle, 1, color, 0); GLES20.glUniform3fv(mAmbientHandle, 1, ambient, 0); GLES20.glUniform3fv(mDiffuseHandle, 1, diffuse, 0); GLES20.glUniform3fv(mSpecularHandle, 1, specular, 0); GLES20.glUniform1f(mShininessHandle, shininess); // transformation matrices int mMVMatrixHandle = GLES20.glGetUniformLocation(shaderProgram, "MVMatrix"); int mPMatrixHandle = GLES20.glGetUniformLocation(shaderProgram, "PMatrix"); int mNormalMatrixHandle = GLES20.glGetUniformLocation(shaderProgram, "NormalMatrix"); GLES20.glUniformMatrix4fv(mMVMatrixHandle, 1, false, mvMatrix, 0); GLES20.glUniformMatrix4fv(mPMatrixHandle, 1, false, pMatrix, 0); GLES20.glUniformMatrix4fv(mNormalMatrixHandle, 1, false, normalMatrix, 0); // lighting data int mLightPosHandle = GLES20.glGetUniformLocation(shaderProgram, "LightPos"); int mLightColorHandle = GLES20.glGetUniformLocation(shaderProgram, "LightColor"); GLES20.glUniform4fv(mLightPosHandle, 1, lightPosition, 0); GLES20.glUniform3fv(mLightColorHandle, 1, lightColor, 0); // texture GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]); int mTexHandle = GLES20.glGetUniformLocation(shaderProgram, "Tex"); GLES20.glUniform1i(mTexHandle, 0); // Draw the object GLES20.glDrawElements( GLES20.GL_TRIANGLES, drawOrder.length, GLES20.GL_UNSIGNED_SHORT, drawListBuffer); // Disable arrays GLES20.glDisableVertexAttribArray(mPositionHandle); GLES20.glDisableVertexAttribArray(mNormalHandle); GLES20.glDisableVertexAttribArray(mUVHandle); }
public void setColor(float[] c) { GLES20.glUniform4fv(mColorHandle, 1, c, 0); }