public void GenerateGeometry(OpenGL gl, uint vertexAttributeLocation, uint normalAttributeLocation) { // Create the vertex array object. This will hold the state of all of the // vertex buffer operations that follow it's binding, meaning instead of setting the // vertex buffer data and binding it each time, we can just bind the array and call // DrawElements - much easier. vertexBufferArray = new VertexBufferArray(); vertexBufferArray.Create(gl); vertexBufferArray.Bind(gl); // Generate the vertices and normals. CreateVertexNormalBuffer(gl, vertexAttributeLocation, normalAttributeLocation); CreateIndexBuffer(gl); vertexBufferArray.Unbind(gl); }
public void Setup(OpenGL gl) { this.vertexBufferArray = new VertexBufferArray(); this.vertexBufferArray.Create(gl); this.vertexBufferArray.Bind(gl); var vertexDataBuffer = new VertexBuffer(); vertexDataBuffer.Create(gl); vertexDataBuffer.Bind(gl); vertexDataBuffer.SetData(gl, 0, this.vertexArray, false, 3); var colourDataBuffer = new VertexBuffer(); colourDataBuffer.Create(gl); colourDataBuffer.Bind(gl); colourDataBuffer.SetData(gl, 1, this.colorArray, false, 4); this.vertexBufferArray.Unbind(gl); Debug.WriteLine("used " + (this.vertexArray.Length * 3 + this.colorArray.Length * 4) / 1000000 + " MB"); this.vertexArray = null; this.colorArray = null; this.isSetup = true; }
private void CreateVertexBufferArray(OpenGL gl, Mesh mesh) { // Create and bind a vertex buffer array. var vertexBufferArray = new VertexBufferArray(); vertexBufferArray.Create(gl); vertexBufferArray.Bind(gl); // Create a vertex buffer for the vertices. var verticesVertexBuffer = new VertexBuffer(); verticesVertexBuffer.Create(gl); verticesVertexBuffer.Bind(gl); verticesVertexBuffer.SetData(gl, VertexAttributes.Position, mesh.vertices.SelectMany(v => v.to_array()).ToArray(), false, 3); if (mesh.normals != null) { var normalsVertexBuffer = new VertexBuffer(); normalsVertexBuffer.Create(gl); normalsVertexBuffer.Bind(gl); normalsVertexBuffer.SetData(gl, VertexAttributes.Normal, mesh.normals.SelectMany(v => v.to_array()).ToArray(), false, 3); } if (mesh.uvs != null) { var texCoordsVertexBuffer = new VertexBuffer(); texCoordsVertexBuffer.Create(gl); texCoordsVertexBuffer.Bind(gl); texCoordsVertexBuffer.SetData(gl, VertexAttributes.TexCoord, mesh.uvs.SelectMany(v => v.to_array()).ToArray(), false, 2); } // We're done creating the vertex buffer array - unbind it and add it to the dictionary. verticesVertexBuffer.Unbind(gl); meshVertexBufferArrays[mesh] = vertexBufferArray; }
void CreateAndPlotData(OpenGL GL, float[] raw_data, int figureID) { if (_dataTail[figureID] + raw_data.Length >= C_SAMPLES_PER_FRAME) { _dataTail[figureID] = 0; // Clear the buffer } AddVerticesToFigure(figureID, raw_data, _dataTail[figureID]); // Create the vertex array object. vertexBufferArray = new VertexBufferArray(); vertexBufferArray.Create(GL); vertexBufferArray.Bind(GL); // Create a vertex buffer for the vertex data. var vertexDataBuffer = new VertexBuffer(); vertexDataBuffer.Create(GL); vertexDataBuffer.Bind(GL); vertexDataBuffer.SetData(GL, attribute_vpos, _data[figureID], false, 3); // Now do the same for the colour data. var colourDataBuffer = new VertexBuffer(); colourDataBuffer.Create(GL); colourDataBuffer.Bind(GL); colourDataBuffer.SetData(GL, attribute_vcol, _dataColor[figureID], false, 3); // Unbind the vertex array, we've finished specifying data for it. vertexBufferArray.Unbind(GL); // Bind the shader, set the matrices. shaderProgram.Bind(GL); //shaderProgram.SetUniformMatrix4(gl, "projectionMatrix", projectionMatrix.to_array()); //shaderProgram.SetUniformMatrix4(gl, "viewMatrix", viewMatrix.to_array()); shaderProgram.SetUniformMatrix4(GL, "modelMatrix", mviewdata.to_array()); // Bind the out vertex array. vertexBufferArray.Bind(GL); // Draw the square. GL.DrawArrays(OpenGL.GL_LINE_STRIP, 0, _dataTail[figureID]); // Unbind our vertex array and shader. vertexBufferArray.Unbind(GL); shaderProgram.Unbind(GL); }
void CreateAndDrawGrid(OpenGL GL) { // Debug.WriteLine("Painting Begins.."); // Create vertices for 4 lines that will split the figure into 3 equal sections xgrid = new vec3[(C_NUM_Y_DIV + 1) * 2]; for (int i = 0; i < (C_NUM_Y_DIV + 1) * 2; i = i + 2) { xgrid[i].x = -1f; xgrid[i + 1].x = 1f; xgrid[i].y = C_X_MARGIN_MIN + C_Y_STEP * i / 2; xgrid[i + 1].y = C_X_MARGIN_MIN + C_Y_STEP * i / 2; xgrid[i].z = 0f; xgrid[i + 1].z = 0f; } coldata = new vec3[] { GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White), GL.Color(DR.Color.White) }; mviewdata = new mat4(1.0f); // --------------- Implementation WITH VERTEX ARRAY OBJECTS -------------------- //// Create the vertex array object. vertexBufferArray = new VertexBufferArray(); vertexBufferArray.Create(GL); vertexBufferArray.Bind(GL); // Create a vertex buffer for the vertex data. var vertexDataBuffer = new VertexBuffer(); vertexDataBuffer.Create(GL); vertexDataBuffer.Bind(GL); vertexDataBuffer.SetData(GL, attribute_vpos, xgrid, false, 3); // Now do the same for the colour data. var colourDataBuffer = new VertexBuffer(); colourDataBuffer.Create(GL); colourDataBuffer.Bind(GL); colourDataBuffer.SetData(GL, attribute_vcol, coldata, false, 3); // Unbind the vertex array, we've finished specifying data for it. vertexBufferArray.Unbind(GL); // Bind the shader, set the matrices. shaderProgram.Bind(GL); //shaderProgram.SetUniformMatrix4(gl, "projectionMatrix", projectionMatrix.to_array()); //shaderProgram.SetUniformMatrix4(gl, "viewMatrix", viewMatrix.to_array()); shaderProgram.SetUniformMatrix4(GL, "modelview", mviewdata.to_array()); // Bind the out vertex array. vertexBufferArray.Bind(GL); GL.DrawArrays(OpenGL.GL_LINES, 0, 8); // Unbind our vertex array and shader. vertexBufferArray.Unbind(GL); shaderProgram.Unbind(GL); // --------------- Implementation WITH VERTEX ARRAY OBJECTS END -------------------- }
/// <summary> /// Creates the geometry for the square, also creating the vertex buffer array. /// </summary> /// <param name="gl">The OpenGL instance.</param> private void CreateVerticesForSquare(OpenGL gl) { var vertices = new float[18]; var colors = new float[18]; // Colors for our vertices vertices[0] = -0.5f; vertices[1] = -0.5f; vertices[2] = 0.0f; // Bottom left corner colors[0] = 1.0f; colors[1] = 1.0f; colors[2] = 1.0f; // Bottom left corner vertices[3] = -0.5f; vertices[4] = 0.5f; vertices[5] = 0.0f; // Top left corner colors[3] = 1.0f; colors[4] = 0.0f; colors[5] = 0.0f; // Top left corner vertices[6] = 0.5f; vertices[7] = 0.5f; vertices[8] = 0.0f; // Top Right corner colors[6] = 0.0f; colors[7] = 1.0f; colors[8] = 0.0f; // Top Right corner vertices[9] = 0.5f; vertices[10] = -0.5f; vertices[11] = 0.0f; // Bottom right corner colors[9] = 0.0f; colors[10] = 0.0f; colors[11] = 1.0f; // Bottom right corner vertices[12] = -0.5f; vertices[13] = -0.5f; vertices[14] = 0.0f; // Bottom left corner colors[12] = 1.0f; colors[13] = 1.0f; colors[14] = 1.0f; // Bottom left corner vertices[15] = 0.5f; vertices[16] = 0.5f; vertices[17] = 0.0f; // Top Right corner colors[15] = 0.0f; colors[16] = 1.0f; colors[17] = 0.0f; // Top Right corner // Create the vertex array object. vertexBufferArray = new VertexBufferArray(); vertexBufferArray.Create(gl); vertexBufferArray.Bind(gl); // Create a vertex buffer for the vertex data. var vertexDataBuffer = new VertexBuffer(); vertexDataBuffer.Create(gl); vertexDataBuffer.Bind(gl); vertexDataBuffer.SetData(gl, 0, vertices, false, 3); // Now do the same for the colour data. var colourDataBuffer = new VertexBuffer(); colourDataBuffer.Create(gl); colourDataBuffer.Bind(gl); colourDataBuffer.SetData(gl, 1, colors, false, 3); // Unbind the vertex array, we've finished specifying data for it. vertexBufferArray.Unbind(gl); }