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; }
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(); }