void SmokeRenderer::render() { switch(mDisplayMode) { case POINTS: glColor3f(1.0, 1.0, 1.0); m_simpleProg->enable(); drawPoints(0, mNumParticles, false); m_simpleProg->disable(); break; case SPRITES: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); glColor4f(1.0, 1.0, 1.0, m_spriteAlpha); drawPointSprites(m_particleProg, 0, mNumParticles, false); break; case VOLUMETRIC: drawSlices(); compositeResult(); break; case NUM_MODES: break; } if (m_displayLightBuffer) { // display light buffer to screen glViewport(0, 0, m_lightBufferSize, m_lightBufferSize); glDisable(GL_DEPTH_TEST); displayTexture(m_lightTexture[m_srcLightTexture]); glViewport(0, 0, mWindowW, mWindowH); } glutReportErrors(); }
void Renderer::display(DisplayMode mode, GLSLProgram *prog) { switch (mode) { case PARTICLE_POINTS: glColor3f(1, 1, 1); glPointSize(m_pointSize); _drawPoints(); break; case PARTICLE_FLUID: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); glColor4f(0.5, 0.5, 0.5, 0.1); glEnable(GL_DEPTH_TEST); glDepthMask(GL_FALSE); // don't write depth glEnable(GL_BLEND); prog->enable(); //prog->setUniform1f("pointRadius", mParticleRadius); prog->setUniform1f("pointRadius", 0.5f); glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vbo); glVertexPointer(4, GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_indexBuffer); glDrawElements(GL_POINTS, m_numParticles, GL_UNSIGNED_INT, (void *)(0 * sizeof(unsigned int))); //glDrawArrays(GL_POINTS, 0, m_numParticles); glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); prog->disable(); glDepthMask(GL_TRUE); glDisable(GL_BLEND); default: case PARTICLE_SPHERES: //glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); //glColor4f(0.5, 0.5, 0.5, 0.1); //glEnable(GL_DEPTH_TEST); //glDepthMask(GL_FALSE); // don't write depth //glEnable(GL_BLEND); //prog->enable(); ////prog->setUniform1f("pointRadius", mParticleRadius); //prog->setUniform1f("pointRadius", 1.5f); //glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vbo); //glVertexPointer(4, GL_FLOAT, 0, 0); //glEnableClientState(GL_VERTEX_ARRAY); //if (m_colorVBO){ // glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_colorVBO); // glColorPointer(4, GL_FLOAT, 0, 0); // glEnableClientState(GL_COLOR_ARRAY); //} //if (m_velVbo) //{ // glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_velVbo); // glClientActiveTexture(GL_TEXTURE0); // glTexCoordPointer(4, GL_FLOAT, 0, 0); // glEnableClientState(GL_TEXTURE_COORD_ARRAY); //} //if (m_indexBuffer){ // glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_indexBuffer); // glDrawElements(GL_POINTS, m_numParticles, GL_UNSIGNED_INT, (void *)(0 * sizeof(unsigned int))); // glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); //} //glDisableClientState(GL_VERTEX_ARRAY); //glDisableClientState(GL_COLOR_ARRAY); //prog->disable(); //glDepthMask(GL_TRUE); //glDisable(GL_BLEND); m_imageFbo->Bind(); glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); m_imageFbo->Disable(); glActiveTexture(GL_TEXTURE0); glMatrixMode(GL_TEXTURE); m_imageFbo->Bind(); glViewport(0, 0, m_imageW, m_imageH); glColor4f(1.0, 1.0, 1.0, 1.0); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); drawpointsprite(); m_imageFbo->Disable(); glActiveTexture(GL_TEXTURE0); glMatrixMode(GL_TEXTURE); glLoadIdentity(); //drawPostProcess(); compositeResult(); //m_program->enable(); //glBindBuffer(GL_ARRAY_BUFFER, m_vbo); //glVertexPointer(4, GL_FLOAT, 0, 0); //glEnableClientState(GL_VERTEX_ARRAY); ///*glBindBufferARB(GL_ARRAY_BUFFER_ARB, normalVbo); //glNormalPointer(GL_FLOAT, sizeof(float) * 4, 0); //glEnableClientState(GL_NORMAL_ARRAY);*/ //glColor3f(1.0, 0.0, 0.0); //glDrawArrays(GL_TRIANGLES, 0, totalVerts); //glDisableClientState(GL_VERTEX_ARRAY); //glDisableClientState(GL_NORMAL_ARRAY); //glBindBuffer(GL_ARRAY_BUFFER, 0); //m_program->disable(); // break; } }