aboutsummaryrefslogtreecommitdiff
path: root/KaplaDemo/samples/sampleViewer3/RenderTarget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'KaplaDemo/samples/sampleViewer3/RenderTarget.cpp')
-rw-r--r--KaplaDemo/samples/sampleViewer3/RenderTarget.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/KaplaDemo/samples/sampleViewer3/RenderTarget.cpp b/KaplaDemo/samples/sampleViewer3/RenderTarget.cpp
new file mode 100644
index 00000000..9b0c7d26
--- /dev/null
+++ b/KaplaDemo/samples/sampleViewer3/RenderTarget.cpp
@@ -0,0 +1,80 @@
+#include "RenderTarget.h"
+
+
+// -------------------------------------------------------------------------------------------
+RenderTarget::RenderTarget(int width, int height)
+{
+ mColorTexId = 0;
+ mDepthTexId = 0;
+ mFBO = NULL;
+
+ resize(width, height);
+}
+
+// -------------------------------------------------------------------------------------------
+void RenderTarget::clear()
+{
+ if (mColorTexId > 0) {
+ glDeleteTextures(1, &mColorTexId);
+ mColorTexId = 0;
+ }
+ if (mDepthTexId > 0) {
+ glDeleteTextures(1, &mDepthTexId);
+ mDepthTexId = 0;
+ }
+ if (mFBO)
+ delete mFBO;
+
+ mFBO = NULL;
+}
+
+// -------------------------------------------------------------------------------------------
+RenderTarget::~RenderTarget()
+{
+ clear();
+}
+
+// -------------------------------------------------------------------------------------------
+GLuint RenderTarget::createTexture(GLenum target, int width, int height, GLint internalFormat, GLenum format)
+{
+ GLuint texid;
+ glGenTextures(1, &texid);
+ glBindTexture(target, texid);
+
+ glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ glTexImage2D(target, 0, internalFormat, width, height, 0, format, GL_FLOAT, 0);
+ return texid;
+}
+
+// -------------------------------------------------------------------------------------------
+void RenderTarget::resize(int width, int height)
+{
+ clear();
+ mFBO = new FrameBufferObject();
+ mColorTexId = createTexture(GL_TEXTURE_RECTANGLE_ARB, width, height, GL_RGBA8, GL_RGBA);
+ mDepthTexId = createTexture(GL_TEXTURE_RECTANGLE_ARB, width, height, GL_DEPTH_COMPONENT32_ARB, GL_DEPTH_COMPONENT);
+}
+
+// -------------------------------------------------------------------------------------------
+void RenderTarget::beginCapture()
+{
+ mFBO->Bind();
+ mFBO->AttachTexture(GL_TEXTURE_RECTANGLE_ARB, mColorTexId, GL_COLOR_ATTACHMENT0_EXT);
+ mFBO->AttachTexture(GL_TEXTURE_RECTANGLE_ARB, mDepthTexId, GL_DEPTH_ATTACHMENT_EXT);
+ mFBO->IsValid();
+}
+
+// -------------------------------------------------------------------------------------------
+void RenderTarget::endCapture()
+{
+ mFBO->AttachTexture(GL_TEXTURE_RECTANGLE_ARB, 0, GL_COLOR_ATTACHMENT0_EXT);
+ mFBO->AttachTexture(GL_TEXTURE_RECTANGLE_ARB, 0, GL_DEPTH_ATTACHMENT_EXT);
+ mFBO->Disable();
+}
+
+
+