12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #include "init_render_to_texture.h"
- #include <cassert>
- IGL_INLINE void igl::opengl::init_render_to_texture(
- const size_t width,
- const size_t height,
- GLuint & tex_id,
- GLuint & fbo_id,
- GLuint & dfbo_id)
- {
- using namespace std;
-
- glDeleteTextures(1,&tex_id);
- glDeleteFramebuffersEXT(1,&fbo_id);
- glDeleteFramebuffersEXT(1,&dfbo_id);
-
- glGenTextures(1, &tex_id);
- glBindTexture(GL_TEXTURE_2D, tex_id);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_ARB, width, height, 0, GL_BGRA, GL_FLOAT, NULL);
- glBindTexture(GL_TEXTURE_2D, 0);
- glGenFramebuffersEXT(1, &fbo_id);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_id);
-
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex_id, 0);
- glGenRenderbuffersEXT(1, &dfbo_id);
- glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, dfbo_id);
- glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, width, height);
-
-
- glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, dfbo_id);
-
- GLenum status;
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- assert(status == GL_FRAMEBUFFER_COMPLETE_EXT);
-
- glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
- }
|