Jump to content

  • Log In with Google      Sign In   
  • Create Account

issues with frame buffer object (gbuffer)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
5 replies to this topic

#1 C0dR   Members   -  Reputation: 144

Like
0Likes
Like

Posted 02 November 2013 - 02:14 AM

Hello,

i currently have a problem with my GBuffer. I draw to 3 textures in a Framebuffer object and then tried to show them with glBlitFramebuffer but i just dont see anyting. Even if I set everything to white in the shader the screen still stays black. I am rendering my meshes with a vertex array object.


Here you can find how i setup everything:

http://pastebin.com/BAiGeAPC


Am i making anything wrong in general or is there just a simple logical fail like forgot something to call?


greets

C0dR

Sponsor:

#2 Kaptein   Prime Members   -  Reputation: 2179

Like
0Likes
Like

Posted 02 November 2013 - 04:55 AM

I see some slight issues

 

glGenFramebuffers(1, &fbo);

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
-->
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);

 

http://www.opengl.org/sdk/docs/man/xhtml/glReadBuffer.xml

glReadBuffer is for glCopyTex* and glReadPixels

 

So you're reading from this,

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);

and you want to draw to this:

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);

 

In my projects I use shaders to show the results of these operations, because of render-to-texture smile.png


Edited by Kaptein, 02 November 2013 - 04:56 AM.


#3 C0dR   Members   -  Reputation: 144

Like
0Likes
Like

Posted 03 November 2013 - 02:27 PM

Ok, so i changed the framebuffer creation to:

glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
[...]
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, bufferTextures[GBUFFER_TEXTURE_COLOR],0);
[...]


But it still doesn't work :(

In an other project with fixed pipeline functions it worked, but there i also draw the meshes with other functions ( glVertexPointer, glNormalPointer, glTexCoordPointer etc ). Maybe here lies the problem?



#4 Sponji   Members   -  Reputation: 1355

Like
0Likes
Like

Posted 04 November 2013 - 12:25 AM

Use glCheckFramebufferStatus to check if the framebuffer is complete. Also I think the framebuffer's texture types should be the same size, GL_RGB and  GL_RGBA is not good. I'm not sure if that's needed in new OpenGL versions though. Try to get it working with positions and depth first?

 

And what is this:

//clear error buffer
glGetError();

Really, check if there's some errors first, it helps a lot. Use gDebugger or some other OpenGL debugging software to check those errors, you can even see what kind of stuff your textures contain.


Edited by Sponji, 04 November 2013 - 08:29 AM.

Derp

#5 beans222   Members   -  Reputation: 1169

Like
0Likes
Like

Posted 04 November 2013 - 12:27 AM

I see some slight issues

 

glGenFramebuffers(1, &fbo);

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
-->
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);

 

http://www.opengl.org/sdk/docs/man/xhtml/glReadBuffer.xml

glReadBuffer is for glCopyTex* and glReadPixels

 

So you're reading from this,

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);

and you want to draw to this:

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);

 

In my projects I use shaders to show the results of these operations, because of render-to-texture smile.png

 

That reference is old. The wiki correctly shows the necessity of using glReadBuffer to set the attachment.

http://www.opengl.org/wiki/GLAPI/glReadBuffer

 

Have you tried a simple forward render using only diffuse color to check your array setup?

Are you checking framebuffer completeness like the guy that beat me to it said? :)

 

There's places to be checking for errors that are lacking said checks.


New C/C++ Build Tool 'Stir' (doesn't just generate Makefiles, it does the build): https://github.com/space222/stir

 


#6 C0dR   Members   -  Reputation: 144

Like
0Likes
Like

Posted 04 November 2013 - 01:33 AM

Ah yes the glGetError(); comes from copy & paste smile.png

 

Yes i already checked the framebuffer completeness and it says its complete.

 

Actually I already setup the gbuffer in an other project and it worked. But in that project i mainly used the fixed pipeline functions. So now i tried to implement it in my actual project, which uses modern opengl with custom matrices etc. Most of the code is just copy and paste, only uniforms and some variables and stuff  were adapted. Thats why I'm so confused. I bet its a really stupid fail of myself in adapting the one project into the other.

I also tried to change the old mesh render methods (glNormalPointer, glVertexPointer etc) in the test project to vertex buffer object rendering and changed the shader so it uses locations instead of gl_FragData and it still worked. Now actually only the custom matrices (and some minor stuff) differ from the main project.

I dont get it, maybe i shall upload the whole project somewhere for you? I bet the error lies somewhere where i cant see it mellow.png

 

Well, when nothing works then i think i have to adapt the actual project to the test project part by part to see which of it causes the error unsure.png


Edited by C0dR, 04 November 2013 - 01:36 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS