Jump to content
  • Advertisement
Sign in to follow this  
Palidine

Bind a VBO as a TexImage2D?

This topic is 1484 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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

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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!