示例#1
0
/* 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 );
}
示例#2
0
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();
}
示例#3
0
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();
}