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 (GLES30.GlVertexShader,
				                   vertexShaderCode);
			int fragmentShader = MyGLRenderer.LoadShader (GLES30.GlFragmentShader,
				                     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
		}
Exemple #2
0
        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.GlVertexShader,
                                                       vertexShaderCode);
            int fragmentShader = MyGLRenderer.LoadShader(GLES30.GlFragmentShader,
                                                         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
        }
Exemple #3
0
        public MyGLSurfaceView(Context context) : base(context)
        {
            // Create an OpenGL ES 3.0 context.
            SetEGLContextClientVersion(3);

            // 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 3.0 context.
			SetEGLContextClientVersion (3);

			// 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;
		}
Exemple #5
0
        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.GlFloat, 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 square
            GLES30.GlDrawElements(GLES30.GlTriangles, drawOrder.Length,
                                  GLES30.GlUnsignedShort, drawListBuffer);

            // Disable vertex array
            GLES30.GlDisableVertexAttribArray(mPositionHandle);
        }