Bind a VBO as a TexImage2D?

Started by
3 comments, last by 21st Century Moose 9 years, 9 months ago

Hey,

Random question to optimize a bizarro pipeline I have going.

I'm using a Geometry Shader + Transform Feedback right now to generate a data set. I want to then pass that data set through another Shader but have it addressable as a sampler2d because I need access to multiple data points in the next Shader (evaluating neighbors).

I know that I can use glGetBufferSubData to extract the output VBOs and then bind that data to a texture with the standard glTexImage2D stuff. But I'm wondering if there is a shortcut whereby I don't need to pull the information off of the graphics card or copy it from one location to another using a COPY_WRITE_BUFFER or whatever. Can I just rebind the VBO somehow and get it treated as a texture addressable by a sampler2d?

Please feel free to ask questions if that's not clear. It's a mouthful...

Advertisement

It occurs to me, I'm being dumb because I can probably find a way to just have the first Shader render the data directly to a texture instead of extracting the data through Transform Feedback... But anyway, I guess I'm still curious about the OP anyway. :)

I don't know if this would work, but you could try binding the transform feedback buffer as a texture buffer object (GL_TEXTURE_BUFFER). In your shader, you would then need to use a samplerBuffer and texelFetch. You shouldn't even need your extra VBO.

ok. Yeah cool. That looks like it will work. I think you have to create the GL_TEXTURE_BUFFER separately with a glGenTextures call, but then it looks like you can just straight up bind a buffer to that. I'll play around with it.

Thanks

Another way is to use the VBO as a PBO, like so:

// first bind it as a VBO

glBindBuffer (GL_ARRAY_BUFFER, myBuffer);

// do VBO stuff here

// now bind it as a PBO and send it to a texture object

glBindBuffer (GL_PIXEL_UNPACK_BUFFER, myBuffer);

glTexImage2D (....);

glBindBuffer (GL_PIXEL_UNPACK_BUFFER, 0);

// magic!

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

This topic is closed to new replies.

Advertisement