Implement raytraced lightmap

This commit is contained in:
2019-01-09 23:32:10 +01:00
parent 3dde1e1083
commit 9787175b13
12 changed files with 240 additions and 28 deletions

View File

@@ -167,6 +167,8 @@ void RTT::bindFramebuffer()
void RTT::unbindFramebuffer()
{
if (!bound)
return;
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, oldDFboID);
glBindFramebuffer(GL_READ_FRAMEBUFFER, oldRFboID);
oldRFboID = 0;
@@ -180,14 +182,28 @@ void RTT::clear(glm::vec4 color)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void RTT::readTextureData(uint8_t* buffer)
uint8_t* RTT::readTextureData(uint8_t* buffer)
{
glReadBuffer(GL_BACK);
bindFramebuffer();
//glGetTexImage(GL_TEXTURE_2D, 0, GL_RGB, GL_UNSIGNED_BYTE, buffer);
if (!buffer)
buffer = createBuffer();
GLint old;
glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &old);
glBindFramebuffer(GL_READ_FRAMEBUFFER, fboID);
glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
unbindFramebuffer();
//glReadBuffer(GL_NONE);
glBindFramebuffer(GL_READ_FRAMEBUFFER, old);
return buffer;
}
float* RTT::readTextureDataFloat(float* buffer)
{
if (!buffer)
buffer = createBufferFloat();
GLint old;
glGetIntegerv(GL_READ_FRAMEBUFFER_BINDING, &old);
glBindFramebuffer(GL_READ_FRAMEBUFFER, fboID);
glReadPixels(0, 0, w, h, GL_RGBA, GL_FLOAT, buffer);
glBindFramebuffer(GL_READ_FRAMEBUFFER, old);
return buffer;
}
uint8_t* RTT::createBuffer()
@@ -195,6 +211,11 @@ uint8_t* RTT::createBuffer()
return new uint8_t[w * h * 4];
}
float * RTT::createBufferFloat()
{
return new float[w * h * 4];
}
void RTT::bindTexture()
{
glBindTexture(GL_TEXTURE_2D, texID);