Ejemplo n.º 1
0
        public VertexBufferObjectMesh AddMesh(Mesh mesh, UInt32 renderableObjectIndex)
        {
            VertexBufferObjectMesh existsMesh = this.MeshExists(mesh);

            if (existsMesh != null)
            {
                return(existsMesh);
            }

            UInt32 offset = ( UInt32 )this._verticesList.Count;

            foreach (var vertex in mesh.vertices)
            {
                this._verticesList.Enqueue(vertex);
                this._perVerticeData.Enqueue(new Vector4UInt32(renderableObjectIndex, 0, 0, 0));
                this._perVerticeData.Enqueue(new Vector4UInt32(renderableObjectIndex, 0, 0, 0));
                this._perVerticeData.Enqueue(new Vector4UInt32(renderableObjectIndex, 0, 0, 0));
                this._perVerticeData.Enqueue(new Vector4UInt32(renderableObjectIndex, 0, 0, 0));
            }
            foreach (var color in mesh.colors)
            {
                this._colorsList.Enqueue(color);
            }
            foreach (var normal in mesh.normals)
            {
                this._normalsList.Enqueue(normal);
            }
            foreach (var texCoord in mesh.texCoords)
            {
                this._texCoordsList.Enqueue(new Vector4(texCoord.X, texCoord.Y, 0.0f, 0.0f));
            }
            VertexBufferObjectMesh newVBOMesh = new VertexBufferObjectMesh(mesh, offset);

            this._meshList.Add(newVBOMesh);

            GL.BindBuffer(BufferTarget.ElementArrayBuffer, this._ibo);
            GL.BufferData(BufferTarget.ElementArrayBuffer, ( IntPtr )(sizeof(uint) * mesh.indices.Count), newVBOMesh.indicesList.ToArray(), BufferUsageHint.StaticDraw);

            GL.BindBuffer(BufferTarget.ArrayBuffer, this.descriptors[VertexBufferObject.DESCRIPTOR_VERTEX]);
            GL.BufferData(BufferTarget.ArrayBuffer, ( IntPtr )(this._verticesList.Count * sizeof(float) * 3), this._verticesList.ToArray(), BufferUsageHint.StaticDraw);

            GL.BindBuffer(BufferTarget.ArrayBuffer, this.descriptors[VertexBufferObject.DESCRIPTOR_COLOR]);
            GL.BufferData(BufferTarget.ArrayBuffer, ( IntPtr )(this._colorsList.Count * sizeof(float) * 4), this._colorsList.ToArray(), BufferUsageHint.StaticDraw);

            GL.BindBuffer(BufferTarget.ArrayBuffer, this.descriptors[VertexBufferObject.DESCRIPTOR_INFO]);
            GL.BufferData(BufferTarget.ArrayBuffer, ( IntPtr )(this._perVerticeData.Count * sizeof(UInt32) * 4), this._perVerticeData.ToArray(), BufferUsageHint.StaticDraw);

            GL.BindBuffer(BufferTarget.ArrayBuffer, this.descriptors[VertexBufferObject.DESCRIPTOR_TEXCOORDS]);
            GL.BufferData(BufferTarget.ArrayBuffer, ( IntPtr )(this._texCoordsList.Count * sizeof(float) * 4), this._texCoordsList.ToArray(), BufferUsageHint.StaticDraw);

            GL.BindBuffer(BufferTarget.ArrayBuffer, this.descriptors[VertexBufferObject.DESCRIPTOR_NORMALS]);
            GL.BufferData(BufferTarget.ArrayBuffer, ( IntPtr )(this._normalsList.Count * sizeof(float) * 3), this._normalsList.ToArray(), BufferUsageHint.StaticDraw);

            GL.BindBuffer(BufferTarget.ArrayBuffer, 0);

            return(newVBOMesh);
        }
Ejemplo n.º 2
0
        public VertexBufferObjectMesh AddMesh( Mesh mesh, UInt32 renderableObjectIndex )
        {
            VertexBufferObjectMesh existsMesh = this.MeshExists( mesh );
              if( existsMesh != null ) {
            return existsMesh;
              }

              UInt32 offset = ( UInt32 ) this._verticesList.Count;
              foreach( var vertex in mesh.vertices ) {
            this._verticesList.Enqueue( vertex );
            this._perVerticeData.Enqueue( new Vector4UInt32( renderableObjectIndex, 0, 0, 0 ) );
            this._perVerticeData.Enqueue( new Vector4UInt32( renderableObjectIndex, 0, 0, 0 ) );
            this._perVerticeData.Enqueue( new Vector4UInt32( renderableObjectIndex, 0, 0, 0 ) );
            this._perVerticeData.Enqueue( new Vector4UInt32( renderableObjectIndex, 0, 0, 0 ) );
              }
              foreach( var color in mesh.colors ) {
            this._colorsList.Enqueue( color );
              }
              foreach( var normal in mesh.normals ) {
            this._normalsList.Enqueue( normal );
              }
              foreach( var texCoord in mesh.texCoords ) {
            this._texCoordsList.Enqueue( new Vector4( texCoord.X, texCoord.Y, 0.0f, 0.0f ) );
              }
              VertexBufferObjectMesh newVBOMesh = new VertexBufferObjectMesh( mesh, offset );
              this._meshList.Add( newVBOMesh );

              GL.BindBuffer( BufferTarget.ElementArrayBuffer, this._ibo );
              GL.BufferData( BufferTarget.ElementArrayBuffer, ( IntPtr ) ( sizeof( uint ) * mesh.indices.Count ), newVBOMesh.indicesList.ToArray(), BufferUsageHint.StaticDraw );

              GL.BindBuffer( BufferTarget.ArrayBuffer, this.descriptors[ VertexBufferObject.DESCRIPTOR_VERTEX ] );
              GL.BufferData( BufferTarget.ArrayBuffer, ( IntPtr ) ( this._verticesList.Count * sizeof( float ) * 3 ), this._verticesList.ToArray(), BufferUsageHint.StaticDraw );

              GL.BindBuffer( BufferTarget.ArrayBuffer, this.descriptors[ VertexBufferObject.DESCRIPTOR_COLOR ] );
              GL.BufferData( BufferTarget.ArrayBuffer, ( IntPtr ) ( this._colorsList.Count * sizeof( float ) * 4 ), this._colorsList.ToArray(), BufferUsageHint.StaticDraw );

              GL.BindBuffer( BufferTarget.ArrayBuffer, this.descriptors[ VertexBufferObject.DESCRIPTOR_INFO ] );
              GL.BufferData( BufferTarget.ArrayBuffer, ( IntPtr ) ( this._perVerticeData.Count * sizeof( UInt32 ) * 4 ), this._perVerticeData.ToArray(), BufferUsageHint.StaticDraw );

              GL.BindBuffer( BufferTarget.ArrayBuffer, this.descriptors[ VertexBufferObject.DESCRIPTOR_TEXCOORDS ] );
              GL.BufferData( BufferTarget.ArrayBuffer, ( IntPtr ) ( this._texCoordsList.Count * sizeof( float ) * 4 ), this._texCoordsList.ToArray(), BufferUsageHint.StaticDraw );

              GL.BindBuffer( BufferTarget.ArrayBuffer, this.descriptors[ VertexBufferObject.DESCRIPTOR_NORMALS ] );
              GL.BufferData( BufferTarget.ArrayBuffer, ( IntPtr ) ( this._normalsList.Count * sizeof( float ) * 3 ), this._normalsList.ToArray(), BufferUsageHint.StaticDraw );

              GL.BindBuffer( BufferTarget.ArrayBuffer, 0 );

              return newVBOMesh;
        }