12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #include "2d/CCGrabber.h"
- #include "base/ccMacros.h"
- #include "renderer/CCTexture2D.h"
- NS_CC_BEGIN
- Grabber::Grabber(void)
- : _FBO(0)
- , _oldFBO(0)
- {
- memset(_oldClearColor, 0, sizeof(_oldClearColor));
-
- glGenFramebuffers(1, &_FBO);
- }
- void Grabber::grab(Texture2D *texture)
- {
- glGetIntegerv(GL_FRAMEBUFFER_BINDING, &_oldFBO);
-
- glBindFramebuffer(GL_FRAMEBUFFER, _FBO);
-
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture->getName(), 0);
-
- GLuint status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
- if (status != GL_FRAMEBUFFER_COMPLETE)
- {
- CCASSERT(0, "Frame Grabber: could not attach texture to framebuffer");
- }
- glBindFramebuffer(GL_FRAMEBUFFER, _oldFBO);
- }
- void Grabber::beforeRender(Texture2D* )
- {
- glGetIntegerv(GL_FRAMEBUFFER_BINDING, &_oldFBO);
- glBindFramebuffer(GL_FRAMEBUFFER, _FBO);
-
-
- glGetFloatv(GL_COLOR_CLEAR_VALUE, _oldClearColor);
-
- glClearColor(0, 0, 0, 0);
-
-
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- }
- void Grabber::afterRender(cocos2d::Texture2D* )
- {
- glBindFramebuffer(GL_FRAMEBUFFER, _oldFBO);
-
-
- glClearColor(_oldClearColor[0], _oldClearColor[1], _oldClearColor[2], _oldClearColor[3]);
- }
- Grabber::~Grabber()
- {
- CCLOGINFO("deallocing Grabber: %p", this);
- glDeleteFramebuffers(1, &_FBO);
- }
- NS_CC_END
|