void PostProcessingPass::draw()
	{
		// Draw fullscreen quad into the next render buffer
		rtt->start(next);
		current->bind();
		if (vsversion == ESV_ARBVP10)
		{
			glEnable(GL_VERTEX_PROGRAM_ARB);
			glBindProgramARB(GL_VERTEX_PROGRAM_ARB, vs);
		}
		if (psversion == ESV_ARBFP10)
		{
			glEnable(GL_FRAGMENT_PROGRAM_ARB);
			glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, ps);
		}
		drawFSQuad();
		if (psversion == ESV_ARBFP10)
		{
			glDisable(GL_FRAGMENT_PROGRAM_ARB);
		}
		if (vsversion == ESV_ARBVP10)
		{
			glDisable(GL_VERTEX_PROGRAM_ARB);
		}
		rtt->end();
		// Swap render targets
		TexturePointer tmp = current;
		current = next;
		next = tmp;
	}
예제 #2
0
파일: game.c 프로젝트: dulrich/EACSMB
void shadingPass(GameState* gs) {
	
	Matrix world;
	
	world = IDENT_MATRIX;
	
	glUseProgram(shadingProg->id);
	glexit("shading prog");

	glActiveTexture(GL_TEXTURE0 + 6);
	glexit("shading tex 1");
	glBindTexture(GL_TEXTURE_2D, gs->diffuseTexBuffer);
	glexit("shading tex 2");
	glActiveTexture(GL_TEXTURE0 + 7);
	glexit("shading tex 3");
	glBindTexture(GL_TEXTURE_2D, gs->normalTexBuffer);
	glexit("shading tex 4");
	glActiveTexture(GL_TEXTURE0 + 8);
	glexit("shading tex 5");
	glBindTexture(GL_TEXTURE_2D, gs->depthTexBuffer);
	glexit("shading tex 6");
	glActiveTexture(GL_TEXTURE0 + 9);
	glexit("shading tex 5");
	glBindTexture(GL_TEXTURE_2D, gs->selectionTexBuffer);
	glexit("shading tex 6");
	
	glUniform1i(glGetUniformLocation(shadingProg->id, "debugMode"), gs->debugMode);
	glUniform1i(glGetUniformLocation(shadingProg->id, "sDiffuse"), 6);
	glUniform1i(glGetUniformLocation(shadingProg->id, "sNormals"), 7);
	glUniform1i(glGetUniformLocation(shadingProg->id, "sDepth"), 8);
 	glUniform1i(glGetUniformLocation(shadingProg->id, "sSelection"), 9);
	glexit("shading samplers");
	
	glUniformMatrix4fv(glGetUniformLocation(shadingProg->id, "world"), 1, GL_FALSE, world.m);
	glexit("shading world");

	glUniform3fv(glGetUniformLocation(shadingProg->id, "sunNormal"), 1, (float*)&gs->sunNormal);
	
	if(gs->screen.resized) {
		glUniform2fv(glGetUniformLocation(shadingProg->id, "resolution"), 1, (float*)&gs->screen.wh);
	}
	
	drawFSQuad();
	glexit("post quad draw");
}
	void PostProcessingPass::drawResult()
	{
		current->bind();
		drawFSQuad();
	}