/** * Writes GL version info to the log. */ public static void logVersionInfo() { Log.i(TAG, "vendor : " + GLES20.glGetString(GLES20.GL_VENDOR)); Log.i(TAG, "renderer: " + GLES20.glGetString(GLES20.GL_RENDERER)); Log.i(TAG, "version : " + GLES20.glGetString(GLES20.GL_VERSION)); if (CHECK_GLES30) { int[] values = new int[1]; GLES30.glGetIntegerv(GLES30.GL_MAJOR_VERSION, values, 0); int majorVersion = values[0]; GLES30.glGetIntegerv(GLES30.GL_MINOR_VERSION, values, 0); int minorVersion = values[0]; if (GLES30.glGetError() == GLES30.GL_NO_ERROR) { Log.i(TAG, "iversion: " + majorVersion + "." + minorVersion); } } }
/** * Writes GL version info to the log. */ public static void logVersionInfo() { Log.i(TAG, "vendor : " + GLES20.glGetString(GLES20.GL_VENDOR)); Log.i(TAG, "renderer: " + GLES20.glGetString(GLES20.GL_RENDERER)); Log.i(TAG, "version : " + GLES20.glGetString(GLES20.GL_VERSION)); if (false) { int[] values = new int[1]; GLES30.glGetIntegerv(GLES30.GL_MAJOR_VERSION, values, 0); int majorVersion = values[0]; GLES30.glGetIntegerv(GLES30.GL_MINOR_VERSION, values, 0); int minorVersion = values[0]; if (GLES30.glGetError() == GLES30.GL_NO_ERROR) { Log.i(TAG, "iversion: " + majorVersion + "." + minorVersion); } } }
public static int loadShader ( int type, String shaderSrc ) { int shader; int[] compiled = new int[1]; // Create the shader object shader = GLES30.glCreateShader ( type ); if ( shader == 0 ) { return 0; } // Load the shader source GLES30.glShaderSource ( shader, shaderSrc ); // Compile the shader GLES30.glCompileShader ( shader ); // Check the compile status GLES30.glGetShaderiv ( shader, GLES30.GL_COMPILE_STATUS, compiled, 0 ); if ( compiled[0] == 0 ) { Log.e ( "ESShader", GLES30.glGetShaderInfoLog ( shader ) ); GLES30.glDeleteShader ( shader ); return 0; } return shader; }
public void onDrawFrame ( GL10 glUnused ) { // Set the viewport GLES30.glViewport ( 0, 0, mWidth, mHeight ); // Clear the color buffer GLES30.glClear ( GLES30.GL_COLOR_BUFFER_BIT ); // Use the program object GLES30.glUseProgram ( mProgramObject ); // Set the vertex color to red GLES30.glVertexAttrib4f ( 0, 1.0f, 0.0f, 0.0f, 1.0f ); // Load the vertex position mVertices.position ( 0 ); GLES30.glVertexAttribPointer ( 1, 3, GLES30.GL_FLOAT, false, 0, mVertices ); GLES30.glEnableVertexAttribArray ( 1 ); GLES30.glDrawArrays ( GLES30.GL_TRIANGLES, 0, 3 ); GLES30.glDisableVertexAttribArray ( 1 ); }
/** * Writes GL version info to the log. */ @SuppressLint("InlinedApi") public static void logVersionInfo() { Log.i(TAG, "vendor : " + GLES20.glGetString(GLES20.GL_VENDOR)); Log.i(TAG, "renderer: " + GLES20.glGetString(GLES20.GL_RENDERER)); Log.i(TAG, "version : " + GLES20.glGetString(GLES20.GL_VERSION)); if (BuildCheck.isAndroid4_3()) { final int[] values = new int[1]; GLES30.glGetIntegerv(GLES30.GL_MAJOR_VERSION, values, 0); final int majorVersion = values[0]; GLES30.glGetIntegerv(GLES30.GL_MINOR_VERSION, values, 0); final int minorVersion = values[0]; if (GLES30.glGetError() == GLES30.GL_NO_ERROR) { Log.i(TAG, "version: " + majorVersion + "." + minorVersion); } } }
/** * Writes GL version info to the log. */ @SuppressLint("InlinedApi") public static void logVersionInfo() { Log.i(TAG, "vendor : " + GLES10.glGetString(GLES10.GL_VENDOR)); Log.i(TAG, "renderer: " + GLES10.glGetString(GLES10.GL_RENDERER)); Log.i(TAG, "version : " + GLES10.glGetString(GLES10.GL_VERSION)); if (BuildCheck.isAndroid4_3()) { final int[] values = new int[1]; GLES30.glGetIntegerv(GLES30.GL_MAJOR_VERSION, values, 0); final int majorVersion = values[0]; GLES30.glGetIntegerv(GLES30.GL_MINOR_VERSION, values, 0); final int minorVersion = values[0]; if (GLES30.glGetError() == GLES30.GL_NO_ERROR) { Log.i(TAG, "version: " + majorVersion + "." + minorVersion); } } }
@Override public void onDrawFrame(GL10 unused) { // Set the view-port GLES20.glViewport ( 0, 0,getWidth(),getHeight() ); // Clear the color buffer GLES20.glClear ( GLES30.GL_COLOR_BUFFER_BIT ); if (mBackground != null) mTextureLayer.draw(); glDepthMask(false); glEnable(GL_BLEND); //TODO particle system support BlendFuc glBlendFunc(GL_SRC_ALPHA, GL_ONE); mParticleSystem.update(1f / 60f); mParticleSystem.updateBuffer(); mParticleSystem.draw(); }
/** * Draws a frame for an eye. * * @param eye The eye to render. Includes all required transformations. */ @Override public void onDrawEye(Eye eye) { // Clear the color buffer set above by glClearColor. GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT | GLES30.GL_DEPTH_BUFFER_BIT); //need this otherwise, it will over right stuff and the cube will look wrong! GLES30.glEnable(GLES30.GL_DEPTH_TEST); // Apply the eye transformation to the camera. Matrix.multiplyMM(view, 0, eye.getEyeView(), 0, camera, 0); // combine the model with the view matrix to create the modelview matreix Matrix.multiplyMM(modelview, 0, view, 0, mRotationMatrix, 0); // combine the model-view with the projection matrix float[] perspective = eye.getPerspective(Z_NEAR, Z_FAR); Matrix.multiplyMM(mMVPMatrix, 0, perspective, 0, modelview, 0); //finally draw the cube with the full Model-view-projection matrix. mCube.draw(mMVPMatrix); }
@Override public void onSurfaceCreated(EGLConfig eglConfig) { mRotationMatrix = new float[16]; camera = new float[16]; view = new float[16]; mMVPMatrix = new float[16]; modelview = new float[16]; headView = new float[16]; forward = new float[3]; GLES30.glClearColor(0.1f, 0.1f, 0.1f, 0.5f); // Dark background so text shows up well. //initialize the cube code for drawing. mCube = new Cube(); // Build the camera matrix Matrix.setLookAtM(camera, 0, 0.0f, 0.0f, CAMERA_Z, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); // Object first appears directly in front of user. Matrix.setIdentityM(mRotationMatrix, 0); Matrix.translateM(mRotationMatrix, 0, 0, 0, -objectDistance); }
@Override public void onSurfaceCreated(EGLConfig eglConfig) { mRotationMatrix = new float[16]; camera = new float[16]; view = new float[16]; mMVPMatrix = new float[16]; modelview = new float[16]; headView = new float[16]; GLES30.glClearColor(0.1f, 0.1f, 0.1f, 0.5f); // Dark background so text shows up well. //initialize the cube code for drawing. mCube = new Cube(); // Object first appears directly in front of user. Matrix.setIdentityM(mRotationMatrix, 0); Matrix.translateM(mRotationMatrix, 0, 0, 0, -objectDistance); }
public void onDrawFrame(GL10 glUnused) { // Set the viewport GLES30.glViewport(0, 0, mWidth, mHeight); // Clear the color buffer, which was set above in glClearColor GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT); // Use the program object GLES30.glUseProgram(mProgramObject); // Load the vertex data GLES30.glVertexAttribPointer(0, 3, GLES30.GL_FLOAT, false, 0, mVertices); //set the starting vertex at 0. GLES30.glEnableVertexAttribArray(0); //actually draw the traingle here GLES30.glDrawArrays(GLES30.GL_TRIANGLES, 0, 3); }
public static int getSupportedMaxPictureSize() { int[] array = new int[1]; GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, array, 0); if (array[0] == 0) { GLES11.glGetIntegerv(GLES11.GL_MAX_TEXTURE_SIZE, array, 0); if (array[0] == 0) { GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, array, 0); if (array[0] == 0) { GLES30.glGetIntegerv(GLES30.GL_MAX_TEXTURE_SIZE, array, 0); } } } return array[0] != 0 ? array[0] : 2048; }
@Override public void onSurfaceChanged(GL10 glUnused, int width, int height) { // Set the OpenGL viewport to the same size as the surface. GLES30.glViewport(0, 0, width, height); // Create a new perspective projection matrix. The height will stay the same // while the width will vary as per aspect ratio. final float ratio = (float) width / height; final float left = -ratio; final float right = ratio; final float bottom = -1.0f; final float top = 1.0f; final float near = 1.0f; final float far = 10.0f; Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far); }
@Override public void onSurfaceCreated(GL10 unused, EGLConfig config) { // Set the background frame color GLES30.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); mTriangle = new Triangle(); mSquare = new Square(); }
public void onSurfaceCreated ( GL10 glUnused, EGLConfig config ) { String vShaderStr = "#version 300 es \n" + "layout(location = 0) in vec4 a_color; \n" + "layout(location = 1) in vec4 a_position; \n" + "out vec4 v_color; \n" + "void main() \n" + "{ \n" + " v_color = a_color; \n" + " gl_Position = a_position; \n" + "}"; String fShaderStr = "#version 300 es \n" + "precision mediump float; \n" + "in vec4 v_color; \n" + "out vec4 o_fragColor; \n" + "void main() \n" + "{ \n" + " o_fragColor = v_color; \n" + "}" ; // Load the shaders and get a linked program object mProgramObject = ESShader.loadProgram ( vShaderStr, fShaderStr ); GLES30.glClearColor ( 1.0f, 1.0f, 1.0f, 0.0f ); }
public static Texture2D generateFloatTexture(int width, int height) { if(GLUtils.HAS_GLES30 && GLUtils.HAS_GL_OES_texture_half_float && GLUtils.HAS_FLOAT_FRAMEBUFFER_SUPPORT) { return new Texture2D(GLES30.GL_RGBA16F, GLES20.GL_RGBA, width, height, GLES20.GL_FLOAT, null); } else { Log.i(TAG, "Texture fallback mode to GLES20 8 bit"); return new Texture2D(GLES20.GL_RGBA, GLES20.GL_RGBA, width, height, GLES20.GL_UNSIGNED_BYTE, null); } }
@Override public void onDrawFrame(GL10 unused) { // Set the view-port GLES20.glViewport ( 0, 0,getWidth(),getHeight() ); // Clear the color buffer GLES20.glClear ( GLES30.GL_COLOR_BUFFER_BIT ); mRainDrops.update(); mRainDropLayer.draw(mRainDrops.getCanvasBitmap()); }
public void draw() { shader.begin(); GLES30.glBindVertexArray(vaoId); GLES20.glDrawElements( GLES20.GL_TRIANGLES, // mode indexes.length, // count GLES20.GL_UNSIGNED_SHORT, // type 0); // offset GLES30.glBindVertexArray(0); // shader.enableVertexAttribute("a_Position"); // shader.setVertexAttribute("a_Position", COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, 0); // // shader.enableVertexAttribute("a_Color"); // shader.setVertexAttribute("a_Color", COLORS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, COORDS_PER_VERTEX * SIZE_OF_FLOAT); // // GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vertexBufferId); // GLES20.glBindBuffer(GLES20.GL_ELEMENT_ARRAY_BUFFER, indexBufferId); // GLES20.glDrawElements( // GLES20.GL_TRIANGLES, // mode // indexes.length, // count // GLES20.GL_UNSIGNED_SHORT, // type // 0); // offset // // shader.disableVertexAttribute("a_Position"); // shader.disableVertexAttribute("a_Color"); shader.end(); }
/** * Draw the floor. * * <p>This feeds in data for the floor into the shader. Note that this doesn't feed in data about * position of the light, so if we rewrite our code to draw the floor first, the lighting might * look strange. */ public void drawFloor(float[] modelViewProjection, float[] modelFloor, float[] modelView, float[] lightPosInEyeSpace ) { GLES30.glUseProgram(mProgramObject); floorModelParam = GLES30.glGetUniformLocation(mProgramObject, "u_Model"); floorModelViewParam = GLES30.glGetUniformLocation(mProgramObject, "u_MVMatrix"); floorModelViewProjectionParam = GLES30.glGetUniformLocation(mProgramObject, "u_MVP"); floorLightPosParam = GLES30.glGetUniformLocation(mProgramObject, "u_LightPos"); floorPositionParam = GLES30.glGetAttribLocation(mProgramObject, "a_Position"); floorNormalParam = GLES30.glGetAttribLocation(mProgramObject, "a_Normal"); floorColorParam = GLES30.glGetAttribLocation(mProgramObject, "a_Color"); GLES30.glEnableVertexAttribArray(floorPositionParam); GLES30.glEnableVertexAttribArray(floorNormalParam); GLES30.glEnableVertexAttribArray(floorColorParam); // Set ModelView, MVP, position, normals, and color. GLES30.glUniform3fv(floorLightPosParam, 1, lightPosInEyeSpace, 0); GLES30.glUniformMatrix4fv(floorModelParam, 1, false, modelFloor, 0); GLES30.glUniformMatrix4fv(floorModelViewParam, 1, false, modelView, 0); GLES30.glUniformMatrix4fv(floorModelViewProjectionParam, 1, false,modelViewProjection, 0); GLES30.glVertexAttribPointer(floorPositionParam, COORDS_PER_VERTEX, GLES30.GL_FLOAT, false, 0, floorVertices); GLES30.glVertexAttribPointer(floorNormalParam, 3, GLES30.GL_FLOAT, false, 0, floorNormals); GLES30.glVertexAttribPointer(floorColorParam, 4, GLES30.GL_FLOAT, false, 0, floorColors); GLES30.glDrawArrays(GLES30.GL_TRIANGLES, 0, 6); }
public static int LoadShader(int type, String shaderSrc) { int shader; int[] compiled = new int[1]; // Create the shader object shader = GLES30.glCreateShader(type); if (shader == 0) { return 0; } // Load the shader source GLES30.glShaderSource(shader, shaderSrc); // Compile the shader GLES30.glCompileShader(shader); // Check the compile status GLES30.glGetShaderiv(shader, GLES30.GL_COMPILE_STATUS, compiled, 0); if (compiled[0] == 0) { Log.e(TAG, "Erorr!!!!"); Log.e(TAG, GLES30.glGetShaderInfoLog(shader)); GLES30.glDeleteShader(shader); return 0; } return shader; }
/** * Sets up the drawing object data for use in an OpenGL ES context. */ public Square() { // initialize vertex byte buffer for shape coordinates ByteBuffer bb = ByteBuffer.allocateDirect( // (# of coordinate values * 4 bytes per float) squareCoords.length * 4); bb.order(ByteOrder.nativeOrder()); vertexBuffer = bb.asFloatBuffer(); vertexBuffer.put(squareCoords); vertexBuffer.position(0); // initialize byte buffer for the draw list ByteBuffer dlb = ByteBuffer.allocateDirect( // (# of coordinate values * 2 bytes per short) drawOrder.length * 2); dlb.order(ByteOrder.nativeOrder()); drawListBuffer = dlb.asShortBuffer(); drawListBuffer.put(drawOrder); drawListBuffer.position(0); // prepare shaders and OpenGL program int vertexShader = MyGLRenderer.loadShader( GLES30.GL_VERTEX_SHADER, vertexShaderCode); int fragmentShader = MyGLRenderer.loadShader( GLES30.GL_FRAGMENT_SHADER, fragmentShaderCode); mProgram = GLES30.glCreateProgram(); // create empty OpenGL Program GLES30.glAttachShader(mProgram, vertexShader); // add the vertex shader to program GLES30.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program GLES30.glLinkProgram(mProgram); // create OpenGL program executables }
@Override public void onDrawFrame(GL10 glUnused) { // Clear the color buffer set above by glClearColor. GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT | GLES30.GL_DEPTH_BUFFER_BIT); //need this otherwise, it will over right stuff and the cube will look wrong! GLES30.glEnable(GLES30.GL_DEPTH_TEST); // Set the camera position (View matrix) note Matrix is an include, not a declared method. Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f); // Create a rotation and translation for the cube Matrix.setIdentityM(mRotationMatrix, 0); //move the cube up/down and left/right Matrix.translateM(mRotationMatrix, 0, mTransX, mTransY, 0); //mangle is how fast, x,y,z which directions it rotates. Matrix.rotateM(mRotationMatrix, 0, mAngle, 0.4f, 1.0f, 0.6f); // combine the model with the view matrix Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mRotationMatrix, 0); // combine the model-view with the projection matrix Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0); mPyramid.draw(mMVPMatrix); //change the angle, so the cube will spin. mAngle+=.4; }
@Override public int glGenTextures() { int[] texture = new int[1]; GLES30.glGenTextures(1, texture, 0); return texture[0]; }
/** * Encapsulates the OpenGL ES instructions for drawing this shape. * * @param mvpMatrix - The Model View Project matrix in which to draw * this shape. */ public void draw(float[] mvpMatrix) { // Add program to OpenGL environment GLES30.glUseProgram(mProgram); // get handle to vertex shader's vPosition member mPositionHandle = GLES30.glGetAttribLocation(mProgram, "vPosition"); // Enable a handle to the triangle vertices GLES30.glEnableVertexAttribArray(mPositionHandle); // Prepare the triangle coordinate data GLES30.glVertexAttribPointer( mPositionHandle, COORDS_PER_VERTEX, GLES30.GL_FLOAT, false, vertexStride, vertexBuffer); // get handle to fragment shader's vColor member mColorHandle = GLES30.glGetUniformLocation(mProgram, "vColor"); // Set color for drawing the triangle GLES30.glUniform4fv(mColorHandle, 1, color, 0); // get handle to shape's transformation matrix mMVPMatrixHandle = GLES30.glGetUniformLocation(mProgram, "uMVPMatrix"); MyGLRenderer.checkGlError("glGetUniformLocation"); // Apply the projection and view transformation GLES30.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); MyGLRenderer.checkGlError("glUniformMatrix4fv"); // Draw the triangle GLES30.glDrawArrays(GLES30.GL_TRIANGLES, 0, vertexCount); // Disable vertex array GLES30.glDisableVertexAttribArray(mPositionHandle); }