void Fbo::End() { UnbindFrameBuffer(); // set viewport to screen v2i dimen = Window::Get()->Sizei(); glViewport( 0, 0, dimen.x, dimen.y ); }
void Fbo::SetRenderTargetTex( StrongHandle<Texture2d> tex, int slot ) { CHECK( !m_bound_as_target, "Cannot bind texture. Fbo currently bound!"); BindFrameBuffer(); SetRenderTargetTexNoBind(tex, slot); UnbindFrameBuffer(); }
void Fbo::End() { UnbindFrameBuffer(); // set viewport to screen //v2i dimen = Window::Get()->Sizei(); //RenderState::Ref().SetViewport( 0, 0, dimen.x, dimen.y ); }
bool GLVideo::EndTargetScene() { SetRenderTarget(SpritePtr(), 0); m_rendering = false; UnbindFrameBuffer(); UpdateInternalShadersViewData(GetScreenSizeF(), false); return true; }
void Fbo::RemoveRenderTargetTex( int slot ) { ASSERT(slot >= 0 && slot < MAX_NUM_SLOTS); // unbind from fbo BindFrameBuffer(); unsigned int GLcolorAttachmentSlot = GL_COLOR_ATTACHMENT0_EXT + slot; glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GLcolorAttachmentSlot, GL_TEXTURE_2D, 0, 0); UnbindFrameBuffer(); m_rtTextures[slot] = StrongHandle<Texture>(); }
void Fbo::RemoveRenderTargetTex( int slot ) { ASSERT(slot >= 0 && slot < MAX_NUM_SLOTS); // unbind from fbo BindFrameBuffer(); unsigned int GLcolorAttachmentSlot = GL_COLOR_ATTACHMENT0 + slot; glFramebufferTexture2D(GL_FRAMEBUFFER, GLcolorAttachmentSlot, GL_TEXTURE_2D, 0, 0); UnbindFrameBuffer(); m_rt_texs[slot] = nullptr; }
void Fbo::SetRenderTargetTex( StrongHandle<Texture> tex, int slot ) { CHECK( tex != NULL, "FBO trying to set NULL texure as color buffer!"); ASSERT(slot >= 0 && slot < MAX_NUM_SLOTS); CHECK( tex->Sizei() == Dimen(), "Texture dimensions must match FBO dimen" ); m_rtTextures[slot] = tex; CHECK( !m_boundAsTarget, "Cannot bind next texture. Fbo currently bound!"); unsigned int GLcolorAttachmentSlot = GL_COLOR_ATTACHMENT0_EXT + slot; BindFrameBuffer(); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GLcolorAttachmentSlot, GL_TEXTURE_2D, tex->Id(), 0); UnbindFrameBuffer(); }
bool GLES2Texture::CreateRenderTarget( VideoWeakPtr video, const unsigned int width, const unsigned int height, const Texture::TARGET_FORMAT fmt) { m_textureInfo.m_texture = m_textureID++; SetTexture(0); const GLint glfmt = (fmt == Texture::TF_ARGB) ? GL_RGBA : GL_RGB; glTexImage2D(GL_TEXTURE_2D, 0, glfmt, static_cast<GLsizei>(width), static_cast<GLsizei>(height), 0, static_cast<GLenum>(glfmt), (fmt == Texture::TF_ARGB) ? GL_UNSIGNED_BYTE : GL_UNSIGNED_SHORT_5_6_5, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // attach 2D texture glGenFramebuffers(1, &m_textureInfo.m_frameBuffer); glBindFramebuffer(GL_FRAMEBUFFER, m_textureInfo.m_frameBuffer); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_textureInfo.m_texture, 0); // create depth buffer... removed for now... will be back whenever it's needed /*GLuint depthRenderbuffer; glGenRenderbuffers(1, &depthRenderbuffer); glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, static_cast<GLsizei>(width), static_cast<GLsizei>(height)); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer);*/ CheckFrameBufferStatus(m_logger, m_textureInfo.m_frameBuffer, m_textureInfo.m_texture, true); UnbindFrameBuffer(); m_type = TT_RENDER_TARGET; m_profile.width = width; m_profile.height = height; m_profile.originalWidth = m_profile.width; m_profile.originalHeight = m_profile.height; GLES2UniformParameter::m_boundTexture2D = 0; glBindTexture(GL_TEXTURE_2D, 0); return true; }
bool GLVideo::SetRenderTarget(SpritePtr pTarget, const unsigned int target) { if (!pTarget) { m_currentTarget.reset(); UnbindFrameBuffer(); } else { if (pTarget->GetType() == Sprite::T_TARGET) { m_currentTarget = pTarget->GetTexture(); } else { Message(GS_L("The current sprite has no render target texture"), GSMT_ERROR); } } return true; }