Sign in to follow this  
Palidine

Bind a VBO as a TexImage2D?

Recommended Posts

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...

Share this post


Link to post
Share on other sites

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. :)

Share this post


Link to post
Share on other sites

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.

Edited by Xycaleth

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this