void StaticGeometryBuffer::build( DrawHint drawHint ) { if(getVertexProperties() & TANGENTS) _generateTangents(); _generateIndices(); if( _vertexBufferHandle == 0 ) glGenBuffers( 1, &_vertexBufferHandle ); if( _indexBufferHandle == 0 ) glGenBuffers( 1, &_indexBufferHandle ); int vCount = getVertexCount(); int iCount = getIndexCount(); glBindBuffer( GL_ARRAY_BUFFER, _vertexBufferHandle ); glBufferData( GL_ARRAY_BUFFER, sizeof( Vertex ) * _vertexList.size(), &_vertexList[ 0 ], drawHint ); //glBufferSubData( GL_ARRAY_BUFFER, 0, sizeof( Vertex ) * _vertexList.size(), &_vertexList[ 0 ] ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, _indexBufferHandle ); glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof( GLuint ) * _indexList.size(), &_indexList[ 0 ] , drawHint ); // glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, 0, sizeof( GLuint ) * _indexList.size(), &_indexList[ 0 ] ); }
void StaticGeometryBuffer::build( Vertex * vertexList, uint vertCount, uint * indexList, uint indexCount, DrawHint drawHint ) { _vertexList.clear(); for( uint i = 0; i < vertCount; ++i ) _vertexList.push_back( vertexList[ i ] ); if( indexList == NULL || indexCount == 0 ) { _generateIndices(); } else { _indexList.clear(); for( uint i = 0; i < indexCount; ++i ) _indexList.push_back( indexList[ i ] ); } if( getVertexProperties() & TANGENTS ) _generateTangents(); if( _vertexBufferHandle == 0 ) glGenBuffers( 1, &_vertexBufferHandle ); if( _indexBufferHandle == 0 ) glGenBuffers( 1, &_indexBufferHandle ); glBindBuffer( GL_ARRAY_BUFFER, _vertexBufferHandle ); glBufferData( GL_ARRAY_BUFFER, sizeof( Vertex ) * _vertexList.size(), NULL, drawHint ); glBufferSubData( GL_ARRAY_BUFFER, 0, sizeof( Vertex ) * _vertexList.size(), &_vertexList[0] ); glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, _indexBufferHandle ); glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof( GLuint ) * _indexList.size(), NULL, drawHint ); glBufferSubData( GL_ELEMENT_ARRAY_BUFFER, 0, sizeof( GLuint ) * _indexList.size(), &_indexList[ 0 ] ); }
bool ObjFile::load(const std::string& fname) { bool status = false; // Open the file std::ifstream file(fname); if (!file.is_open()) { mIsLoaded = false; return false; } // Parse the file status = _parse(file); if (!status) { mIsLoaded = false; return false; } // Done with file file.close(); // Organize the parsed data status = _organise(); if (!status) { mIsLoaded = false; return false; } _finalize(); _generateTangents(0); // Success! mIsLoaded = true; return true; }