Exemple #1
0
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;
}
Exemple #2
0
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;
}