/* This function render sprites array into new opengl texture (or clear it). * ahandle - pointer on opengl texture, if points to 0 new texture will be generated; * width, height - width and height of new texture; * sprites - array of sprites to draw; * returns boolean */ bool TextureArray::drawToNewGLTexture( GLuint* ahandle, int width, int height, Sprite* sprites, unsigned int count ) { GLuint FBOHandle; GLuint VBOHandle; // A FBO will be used to draw textures. FBO creation and setup. if( !GLHelpers::CreateTexture( ahandle, width, height ) || !GLHelpers::BindTextureToFBO( *ahandle, FBOHandle ) || !GLHelpers::SetUpView( width, height, 1 ) ) return false; VertexV2FT2FC4UI* vertices = (VertexV2FT2FC4UI*)malloc( (unsigned)sizeof(VertexV2FT2FC4UI) * count * 4 ); int vboc = 0; VBOStructureHandle* vbostructure = prepareVBO( &vboc, sprites, count, vertices ); glGenBuffers(1, &VBOHandle); GLHelpers::DrawVBO( VBOHandle, vboc, vbostructure, vertices ); glDeleteBuffers( 1, &VBOHandle ); free( vertices ); // Reset FBO GLHelpers::ClearView( ); return GLHelpers::UnbindFBO( FBOHandle ); }
void VBOSphere::render() { if (vertexVBO == -1) { prepareVBO(); } glPushMatrix(); setMatrix(); #ifdef OPENGL_ES1 glColor4f(objectColor.r, objectColor.g, objectColor.b, objectColor.a); glDisableClientState(GL_COLOR_ARRAY); #else glDisableVertexAttribArray(shaderVertexColor); glVertexAttrib4f(shaderVertexColor, objectColor.r, objectColor.g, objectColor.b, objectColor.a); #endif glBindBuffer(GL_ARRAY_BUFFER, vertexVBO); #ifdef OPENGL_ES1 glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, 0); #else glEnableVertexAttribArray(shaderVertexPosition); glVertexAttribPointer(shaderVertexPosition, 3, GL_FLOAT, GL_FALSE, 0, 0); #endif glBindBuffer(GL_ARRAY_BUFFER, vertexNormalVBO); #ifdef OPENGL_ES1 glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, 0); #else glEnableVertexAttribArray(shaderVertexNormal); glVertexAttribPointer(shaderVertexNormal, 3, GL_FLOAT, GL_FALSE, 0, 0); #endif glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, faceVBO); glDrawElements(GL_TRIANGLES, faceCount * 3, GL_UNSIGNED_SHORT, 0); #ifdef OPENGL_ES1 glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); #endif glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glPopMatrix(); }
void Renderable::render() { if (vertexVBO == -1) { #ifdef OPENGL_ES1 #else prepareVBO(); #endif } glPushMatrix(); setMatrix(); drawChildren(); if (vertexColors && colorBuffer != NULL) { #ifdef OPENGL_ES1 glEnableClientState(GL_COLOR_ARRAY); glColorPointer(4, GL_FLOAT, 0, colorBuffer); #else glEnableVertexAttribArray(shaderVertexColor); glBindBuffer(GL_ARRAY_BUFFER, colorVBO); glVertexAttribPointer(shaderVertexColor, 4, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); #endif } else { #ifdef OPENGL_ES1 glColor4f(objectColor.r, objectColor.g, objectColor.b, objectColor.a); #else glDisableVertexAttribArray(shaderVertexColor); glVertexAttrib4f(shaderVertexColor, objectColor.r, objectColor.g, objectColor.b, objectColor.a); #endif } if (nFaces > 0) { #ifdef OPENGL_ES1 glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vertexBuffer); #else glEnableVertexAttribArray(shaderVertexPosition); glBindBuffer(GL_ARRAY_BUFFER, vertexVBO); glVertexAttribPointer(shaderVertexPosition, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); #endif if (vertexNormalBuffer != NULL) { #ifdef OPENGL_ES1 glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, vertexNormalBuffer); #else glBindBuffer(GL_ARRAY_BUFFER, vertexNormalVBO); glEnableVertexAttribArray(shaderVertexNormal); glVertexAttribPointer(shaderVertexNormal, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); #endif } #ifdef OPENGL_ES1 glDrawElements(GL_TRIANGLES, nFaces, GL_UNSIGNED_SHORT, faceBuffer); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); #else glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, faceVBO); glDrawElements(GL_TRIANGLES, nFaces, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); #endif } if (vertexColors) { #ifdef OPENGL_ES1 glDisableClientState(GL_COLOR_ARRAY); #else glDisableVertexAttribArray(shaderVertexColor); #endif } glPopMatrix(); }