20 glGenFramebuffers(1, &this->
id);
23 ERROR(
"framebuffer: error generating framebuffer");
24 throw std::runtime_error(
"framebuffer: error generating framebuffer");
26 glBindFramebuffer(GL_FRAMEBUFFER, this->
id);
29 glGenTextures(1, &this->texture_id);
30 if (this->texture_id == 0)
32 ERROR(
"framebuffer: error generating texture");
35 glBindTexture(GL_TEXTURE_2D, this->texture_id);
38 glTexImage2D(GL_TEXTURE_2D, 0, this->format, width, height, 0, GL_RGB,
39 GL_UNSIGNED_BYTE, NULL);
40 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
41 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
42 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
45 glGenRenderbuffers(1, &this->render_buffer_id);
46 glBindRenderbuffer(GL_RENDERBUFFER, this->render_buffer_id);
47 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
48 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
49 GL_RENDERBUFFER, this->render_buffer_id);
52 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
54 ERROR(
"framebuffer: not complete");
58 glBindFramebuffer(GL_FRAMEBUFFER, 0);
59 glBindTexture(GL_TEXTURE_2D, 0);
60 glBindRenderbuffer(GL_RENDERBUFFER, 0);
89 glBindFramebuffer(GL_FRAMEBUFFER, this->
id);
90 if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
92 ERROR(
"framebuffer: not complete");
96 glBindTexture(GL_TEXTURE_2D, this->texture_id);
99 glTexImage2D(GL_TEXTURE_2D, 0, this->
format, width, height, 0, GL_RGBA,
100 GL_UNSIGNED_BYTE, NULL);
101 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
102 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
103 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
104 this->texture_id, 0);
105 glBindTexture(GL_TEXTURE_2D, 0);
108 glBindRenderbuffer(GL_RENDERBUFFER, this->render_buffer_id);
109 glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
110 glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
111 GL_RENDERBUFFER, this->render_buffer_id);
113 window::set_width_height(width, height);