Ejemplo n.º 1
0
void RenderPipe_depth_opengl::render( GLuint target )
{
	glDepthMask(GL_FALSE);
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, target);

	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glLoadIdentity();

	glMatrixMode(GL_PROJECTION);
	glPushMatrix();
	glLoadIdentity();

	glUseProgram(m_pipeProgramID);

	GLuint reg = glGetUniformLocation(m_pipeProgramID, "u_image");
	glUniform1i(reg, 0);
	reg = glGetUniformLocation(m_pipeProgramID, "u_blurredImage");
	glUniform1i(reg, 1);
	reg = glGetUniformLocation(m_pipeProgramID, "u_zBuffer");
	glUniform1i(reg, 2);

	CMatrix inverProjMat = GetProjectionMatrix();
	inverProjMat.Invert();

	m_zInv = inverProjMat.GetColumn(3);	// only need to calculate z value, so only 4th column is needed.

	m_depthOfField = GetDepthOfFieldFactors();

	reg = glGetUniformLocation(m_pipeProgramID, "u_depthOfField");
	if (reg >= 0)
		glUniform4fv(reg, 1, (float *)&m_depthOfField);
	if (reg >= 0)
		reg = glGetUniformLocation(m_pipeProgramID, "u_zInv");
	glUniform4fv(reg, 1, (float *)&m_zInv);


	glActiveTexture(GL_TEXTURE0_ARB);

	glEnable(GL_TEXTURE_2D);
	glActiveTexture(GL_TEXTURE0_ARB);
	glBindTexture(GL_TEXTURE_2D, m_image);

	glActiveTexture(GL_TEXTURE1_ARB);
	glBindTexture(GL_TEXTURE_2D, m_blurredImage);

	glActiveTexture(GL_TEXTURE2_ARB);
	glBindTexture(GL_TEXTURE_2D, m_depthTexture);
	glActiveTexture(GL_TEXTURE0_ARB);

	renderScreenQuad();

	glMatrixMode(GL_PROJECTION);
	glPopMatrix();
	glMatrixMode(GL_MODELVIEW);
	glPopMatrix();

	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
	glDepthMask(GL_TRUE);
}