示例#1
0
文件: Fbo.cpp 项目: eddietree/tiger
void Fbo::End()
{
	UnbindFrameBuffer();

	// set viewport to screen
	v2i dimen =  Window::Get()->Sizei();
	glViewport( 0, 0, dimen.x, dimen.y );
}
示例#2
0
文件: Fbo.cpp 项目: arajar/funk
void Fbo::SetRenderTargetTex( StrongHandle<Texture2d> tex, int slot )
{
	CHECK( !m_bound_as_target, "Cannot bind texture. Fbo currently bound!");

	BindFrameBuffer();
    SetRenderTargetTexNoBind(tex, slot);
	UnbindFrameBuffer();
}
示例#3
0
文件: Fbo.cpp 项目: arajar/funk
void Fbo::End()
{
	UnbindFrameBuffer();

	// set viewport to screen
	//v2i dimen =  Window::Get()->Sizei();
	//RenderState::Ref().SetViewport( 0, 0, dimen.x, dimen.y );
}
示例#4
0
bool GLVideo::EndTargetScene()
{
	SetRenderTarget(SpritePtr(), 0);
	m_rendering = false;
	UnbindFrameBuffer();

	UpdateInternalShadersViewData(GetScreenSizeF(), false);

	return true;
}
示例#5
0
文件: Fbo.cpp 项目: eddietree/tiger
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>();
}
示例#6
0
文件: Fbo.cpp 项目: arajar/funk
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;
}
示例#7
0
文件: Fbo.cpp 项目: eddietree/tiger
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();
}
示例#8
0
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;
}
示例#9
0
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;
}