Sign in to follow this  
DeathCarrot

shadow cubemap FBO init = GL_FRAMEBUFFER_UNSUPPORTED_EXT?

Recommended Posts

I couldn't find any resources on this so I pieced it together from here and there so it could be completely wrong, but this initialisation is causing a GL_FRAMEBUFFER_UNSUPPORTED_EXT error (The class itself is a mess as it handles all kinds of FBOs, not just shadow cubemaps, but these are the gl commands that are being run in it in this instance):
glGenFramebuffersEXT(1, &id);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id);

glGenTextures(1, &img);
glBindTexture(GL_TEXTURE_CUBE_MAP, img);

glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_DEPTH_COMPONENT24,
    width, height, 0,
    GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
.
.
.
glTexImage2D (GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_DEPTH_COMPONENT24,
    width, height, 0,
    GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);

glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
    GL_TEXTURE_CUBE_MAP_POSITIVE_X, img, 0);
glDrawBuffer(0);
glReadBuffer(0);

glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
The final command there returns GL_FRAMEBUFFER_UNSUPPORTED_EXT. Also, to select which face to render to, I just use glFramebufferTexture2DEXT right? Thanks.

Share this post


Link to post
Share on other sites
Aah, well that would certainly explain the error, thanks. So for full shadows from a point-light I need 6 separate FBOs? Either that or render the depth component onto a colour buffer. Suggestions?

What about depth renderbuffers in cubemaps?

Thanks.

Share this post


Link to post
Share on other sites
For point lights, you can make 6 separate buffers, or use a cubemap buffer into which you specially write the depth values using a shader, or use 2 depth maps and use the parabolic projection method.

Depth render buffers are not supported on anything because the r component of str is needed for depth compare mode.
Cubemaps and depth maps are not compatible but maybe one day they will use the q component and finally offer an extension.

Share this post


Link to post
Share on other sites
Quote:
Original post by V-man
Depth render buffers are not supported on anything because the r component of str is needed for depth compare mode.
Cubemaps and depth maps are not compatible but maybe one day they will use the q component and finally offer an extension.


Already here; the GF8 series allows you to use depth cube maps by using the q param as the compare variable.

Share this post


Link to post
Share on other sites
Quote:
Already here; the GF8 series allows you to use depth cube maps by using the q param as the compare variable.


Good thing that I have a GF8 :)
Is there a special extension or thing I need to do or I can just create a depth cubemap?

Share this post


Link to post
Share on other sites
It's covered in the EXT_gpu_shader4 extension specs.

I think it just relaxes the rules on Cube map internal format and possibly gives you a new entry point for GLSL to perform the lookup, but I'm not 100% on that last one, you'll need to read the spec above.

Infact, I recommend reading the various EXT specs for DX10 stuffs, they are pretty intresting (like the ability to have layed FBOs so that you can use the geometry shader to decide which layer a primative goes to).

Share this post


Link to post
Share on other sites
Is it possible to use the framebuffer's depth? I am trying to make a cubemap showing the reflections of the world so I want to render the environment to a cubemap (need some kind of depth buffer here) and use it in a shader.

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