Implement raytraced lightmap
This commit is contained in:
33
src/rtt.cpp
33
src/rtt.cpp
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user