Kaydet (Commit) 5ace9183 authored tarafından Markus Mohrhard's avatar Markus Mohrhard Kaydeden (comit) Markus Mohrhard

add possibility to generate FBO with texture

The caller is responsible to delete the buffers. Depending on bRenderbuffer either with glDeleteRenderbuffers or with glDeleteTextures.

Change-Id: I5ccbd49862c381abf04e812765cced485a083f89
üst 779ae371
...@@ -30,9 +30,11 @@ public: ...@@ -30,9 +30,11 @@ public:
/** /**
* The caller is responsible for deleting the buffer objects identified by * The caller is responsible for deleting the buffer objects identified by
* nFramebufferId, nRenderbufferDepthId and nRenderbufferColorId * nFramebufferId, nRenderbufferDepthId and nRenderbufferColorId
* @param bRenderbuffer true => off-screen rendering, false => rendering to texture
* This also affects whether to free with glDeleteRenderbuffers or glDeleteTextures
*/ */
static void createFramebuffer(long nWidth, long nHeight, static void createFramebuffer(long nWidth, long nHeight, GLuint& nFramebufferId,
GLuint& nFramebufferId, GLuint& nRenderbufferTextId, GLuint& nRenderbufferColorId); GLuint& nRenderbufferTextId, GLuint& nRenderbufferColorId, bool bRenderbuffer = true);
// Get OpenGL version (needs a context) // Get OpenGL version (needs a context)
static float getGLVersion(); static float getGLVersion();
......
...@@ -275,8 +275,8 @@ std::ostream& operator<<(std::ostream& rStrm, const glm::mat4& rMatrix) ...@@ -275,8 +275,8 @@ std::ostream& operator<<(std::ostream& rStrm, const glm::mat4& rMatrix)
return rStrm; return rStrm;
} }
void OpenGLHelper::createFramebuffer(long nWidth, long nHeight, void OpenGLHelper::createFramebuffer(long nWidth, long nHeight, GLuint& nFramebufferId,
GLuint& nFramebufferId, GLuint& nRenderbufferDepthId, GLuint& nRenderbufferColorId) GLuint& nRenderbufferDepthId, GLuint& nRenderbufferColorId, bool bRenderbuffer)
{ {
// create a renderbuffer for depth attachment // create a renderbuffer for depth attachment
glGenRenderbuffers(1, &nRenderbufferDepthId); glGenRenderbuffers(1, &nRenderbufferDepthId);
...@@ -284,13 +284,31 @@ void OpenGLHelper::createFramebuffer(long nWidth, long nHeight, ...@@ -284,13 +284,31 @@ void OpenGLHelper::createFramebuffer(long nWidth, long nHeight,
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, nWidth, nHeight); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, nWidth, nHeight);
glBindRenderbuffer(GL_RENDERBUFFER, 0); glBindRenderbuffer(GL_RENDERBUFFER, 0);
// create a renderbuffer for color attachment if(bRenderbuffer)
glGenRenderbuffers(1, &nRenderbufferColorId); {
glBindRenderbuffer(GL_RENDERBUFFER, nRenderbufferColorId); // create a renderbuffer for color attachment
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, nWidth, nHeight); glGenRenderbuffers(1, &nRenderbufferColorId);
glBindRenderbuffer(GL_RENDERBUFFER, 0); glBindRenderbuffer(GL_RENDERBUFFER, nRenderbufferColorId);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, nWidth, nHeight);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
}
else
{
glGenTextures(1, &nRenderbufferColorId);
glBindTexture(GL_TEXTURE_2D, nRenderbufferColorId);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, nWidth, nHeight, 0,
GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, nRenderbufferColorId, 0);
}
// create a framebuffer object and attach renderbuffer and texture // create a framebuffer object and attach renderbuffer
glGenFramebuffers(1, &nFramebufferId); glGenFramebuffers(1, &nFramebufferId);
glCheckFramebufferStatus(GL_FRAMEBUFFER); glCheckFramebufferStatus(GL_FRAMEBUFFER);
glBindFramebuffer(GL_FRAMEBUFFER, nFramebufferId); glBindFramebuffer(GL_FRAMEBUFFER, nFramebufferId);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment