diff options
| author | git perforce import user <a@b> | 2016-10-25 12:29:14 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees> | 2016-10-25 18:56:37 -0500 |
| commit | 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch) | |
| tree | fa6485c169e50d7415a651bf838f5bcd0fd3bfbd /KaplaDemo/samples/sampleViewer3/RenderTarget.cpp | |
| download | physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip | |
Initial commit:
PhysX 3.4.0 Update @ 21294896
APEX 1.4.0 Update @ 21275617
[CL 21300167]
Diffstat (limited to 'KaplaDemo/samples/sampleViewer3/RenderTarget.cpp')
| -rw-r--r-- | KaplaDemo/samples/sampleViewer3/RenderTarget.cpp | 80 |
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(); +} + + + |