[osg-users] Problems with TBO Texture Buffer Object's

Johannes Schüth account at jotschi.de
Sat Nov 28 13:52:23 PST 2009


Hi,

i want to use texture buffer objects within my program. 

At the beginning i managed to get tbo's to work within a pure opengl application. 

This is what i did:

1. create tbo

Code:

// create buffer object
glGenBuffers(1, tbo);
glBindBuffer(GL_TEXTURE_BUFFER_EXT, *tbo);

// initialize buffer object
unsigned int size = mesh_width * mesh_height * 4 * sizeof(float);
glBufferData(GL_TEXTURE_BUFFER_EXT, size, 0, GL_DYNAMIC_DRAW);

//tex
glGenTextures(1, tex);
glBindTexture(GL_TEXTURE_BUFFER_EXT, *tex);
glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, GL_RGBA32F_ARB, *tbo);
glBindBuffer(GL_TEXTURE_BUFFER_EXT, 0);




2. set data of the tbo

Code:

glBindBuffer(GL_TEXTURE_BUFFER_EXT, tbo);
p = (float4*) glMapBuffer(GL_TEXTURE_BUFFER_EXT, GL_WRITE_ONLY);

for (int u = 0; u < mesh_height; u++) {
	for (int v = 0; v < mesh_width; v++) {
		p[u + (v * mesh_width)][0] = ((float) u / mesh_height) * 2 - (1.0);
		p[u + (v * mesh_width)][1] = ((float) v / mesh_width) * 2 - (1.0);
		p[u + (v * mesh_width)][2] = 0.0f;
		p[u + (v * mesh_width)][3] = 1.0f;
	}
}
glUnmapBuffer(GL_TEXTURE_BUFFER_EXT);
glBindBuffer(GL_TEXTURE_BUFFER_EXT, 0);




3. set uniform

Code:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_BUFFER_EXT, displacementTex);




And now i wanted to port this into osg. I have no idea how to create the tbo.

I managed to get as far as:

Code:

	osg::BufferObject::Extensions* ext = osg::BufferObject::getExtensions(
			_gc->getState()->getContextID(), true);
	ext->glBindBuffer(GL_TEXTURE_BUFFER_EXT, tbo);
	unsigned int size = mesh_width * mesh_height * 4 * sizeof(float);
	ext->glBufferData(GL_TEXTURE_BUFFER_EXT, size, 0, GL_DYNAMIC_DRAW);




Do i have to create a osg::Texture::TextureObject Object to bind it to the BufferObject? I do not know how to port these calls:

Code:

	glBindTexture(GL_TEXTURE_BUFFER_EXT, *tex);
	glTexBufferEXT(GL_TEXTURE_BUFFER_EXT, GL_RGBA32F_ARB, *tbo);




My goal is to create a float buffer object by that i can access a huge amount of floats within my shader.

Thank you!

Cheers,
Johannes

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=20521#20521







More information about the osg-users mailing list