bool CRenderTarget::BindColorTexture(axelynx::Texture* tex, int layer) { OPENGL_CHECK_FOR_ERRORS(); // указываем для текущего FBO текстуру, куда следует производить рендер глубины glBindFramebuffer(GL_FRAMEBUFFER, fbo_); if(tex) { CTexture *ctex = dynamic_cast<CTexture*>(tex); glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + layer, ctex->GetHandle(), 0); used_layer_[layer] = true; } else { glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + layer, 0, 0); used_layer_[layer] = false; } if(current_) current_->Bind(); else glBindFramebuffer(GL_FRAMEBUFFER, 0); OPENGL_CHECK_FOR_ERRORS(); return true; }
bool CRenderTarget::Bind3DTexture(axelynx::Texture* tex, int texlayer, int rendertargetlayer) { OPENGL_CHECK_FOR_ERRORS(); glBindFramebuffer(GL_FRAMEBUFFER, fbo_); OPENGL_CHECK_FOR_ERRORS(); if(tex) { CTexture *ctex = dynamic_cast<CTexture*>(tex); glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + rendertargetlayer, GL_TEXTURE_3D, ctex->GetHandle(), 0, texlayer); used_layer_[rendertargetlayer] = true; } else { glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + rendertargetlayer, GL_TEXTURE_3D, 0, 0, texlayer); used_layer_[rendertargetlayer] = false; } OPENGL_CHECK_FOR_ERRORS(); if(current_) current_->Bind(); else glBindFramebuffer(GL_FRAMEBUFFER, 0); OPENGL_CHECK_FOR_ERRORS(); return true; }