Created
April 20, 2017 13:36
-
-
Save capnramses/203c00dbff43e55155574a7dee81cf4e to your computer and use it in GitHub Desktop.
OpenGL multi-version cubemap shadow texture creation for point lights
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
bool change_shadow_size (int dims) { | |
game_log ("generating shadow textures, size %i", dims); | |
g_sett.shadow_size = dims; | |
glBindFramebuffer(GL_FRAMEBUFFER, g_shads.cube_fb); | |
{ // colour cube texture | |
bind_cube_texture (0, g_shads.cube_colour_tex); | |
for (int i = 0; i < 6; i++) { | |
// NOTE: 16F and FLOAT are NOT part of GL 2.1 but MESA didn't support | |
// the 16 and INT which ARE part of GL 2.1 | |
glTexImage2D (GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGBA16F, | |
g_sett.shadow_size, g_sett.shadow_size, 0, GL_RED, GL_FLOAT, NULL); | |
} | |
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_WRAP_R, GL_CLAMP_TO_EDGE); | |
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); | |
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, | |
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, g_shads.cube_colour_tex, 0); | |
bind_cube_texture (0, 0); | |
} | |
{ // create renderbuffer | |
glBindRenderbuffer (GL_RENDERBUFFER, g_shads.render_buffer); | |
glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT, | |
g_sett.shadow_size, g_sett.shadow_size); | |
// attach renderbuffer to framebuffer | |
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, | |
GL_RENDERBUFFER, g_shads.render_buffer); | |
} | |
if (!verify_bound_framebuffer ()) { | |
game_log_err ("ERROR: verifying framebuffer for depth\n"); | |
return false; | |
} | |
glBindFramebuffer (GL_FRAMEBUFFER, 0); | |
return true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment