public Triangle() { // initialize vertex byte buffer for shape coordinates ByteBuffer bb = ByteBuffer.AllocateDirect( // (number of coordinate values * 4 bytes per float) triangleCoords.Length * 4); // use the device hardware's native byte order bb.Order(ByteOrder.NativeOrder()); // create a floating point buffer from the ByteBuffer vertexBuffer = bb.AsFloatBuffer(); // add the coordinates to the FloatBuffer vertexBuffer.Put(triangleCoords); // set the buffer to read the first coordinate vertexBuffer.Position(0); // prepare shaders and OpenGL program int vertexShader = MyGLRenderer.LoadShader(GLES20.GlVertexShader, vertexShaderCode); int fragmentShader = MyGLRenderer.LoadShader(GLES20.GlFragmentShader, fragmentShaderCode); mProgram = GLES20.GlCreateProgram(); // create empty OpenGL Program GLES20.GlAttachShader(mProgram, vertexShader); // add the vertex shader to program GLES20.GlAttachShader(mProgram, fragmentShader); // add the fragment shader to program GLES20.GlLinkProgram(mProgram); // create OpenGL program executables }
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(GLES20.GlVertexShader, vertexShaderCode); int fragmentShader = MyGLRenderer.LoadShader(GLES20.GlFragmentShader, fragmentShaderCode); mProgram = GLES20.GlCreateProgram(); // create empty OpenGL Program GLES20.GlAttachShader(mProgram, vertexShader); // add the vertex shader to program GLES20.GlAttachShader(mProgram, fragmentShader); // add the fragment shader to program GLES20.GlLinkProgram(mProgram); // create OpenGL program executables }
public MyGLSurfaceView(Context context) : base(context) { // Create an OpenGL ES 2.0 context. SetEGLContextClientVersion(2); // Set the Renderer for drawing on the GLSurfaceView mRenderer = new MyGLRenderer(); SetRenderer(mRenderer); // Render the view only when there is a change in the drawing data this.RenderMode = Rendermode.WhenDirty; }
public MyGLSurfaceView (Context context) : base (context) { // Create an OpenGL ES 2.0 context. SetEGLContextClientVersion (2); // Set the Renderer for drawing on the GLSurfaceView mRenderer = new MyGLRenderer (); SetRenderer (mRenderer); // Render the view only when there is a change in the drawing data this.RenderMode = Rendermode.WhenDirty; }
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.GlFloat, 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.GlTriangles, drawOrder.Length, GLES20.GlUnsignedShort, drawListBuffer); // Disable vertex array GLES20.GlDisableVertexAttribArray(mPositionHandle); }