Skip to content

Instantly share code, notes, and snippets.

@capnramses
Created April 20, 2017 13:36
Show Gist options
  • Save capnramses/203c00dbff43e55155574a7dee81cf4e to your computer and use it in GitHub Desktop.
Save capnramses/203c00dbff43e55155574a7dee81cf4e to your computer and use it in GitHub Desktop.
OpenGL multi-version cubemap shadow texture creation for point lights
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