void LightNode::lightPass(std::stack<QMatrix4x4> &MVStack, SceneGraph *root) { QOpenGLShaderProgram *shader = Shaders::storeDepthProgram; Shaders::bind(shader); glBindFramebuffer(GL_FRAMEBUFFER, shadowFBO()); GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT1}; glDrawBuffers(1, DrawBuffers); glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0,0, shadowWidth(), shadowHeight()); MVStack.push(MVStack.top()); MVStack.top() *= lightView(); root->drawGeometry(MVStack , lightView() , perspectiveMatrix() , shader); MVStack.pop(); //Recreate the mipmaps glBindTexture(GL_TEXTURE_2D, shadowMoments()); glGenerateMipmap(GL_TEXTURE_2D); //Release and relax, brah glBindFramebuffer(GL_FRAMEBUFFER, 0); Shaders::release(shader); }
void VolumeModel::bindUniformValues(QOpenGLShaderProgram * program, const Viewport::Viewport * viewport) const { program->setUniformValue(uniformValues["view"], view(viewport)); program->setUniformValue(uniformValues["model"], model(viewport)); program->setUniformValue(uniformValues["projection"], projection(viewport)); program->setUniformValue(uniformValues["lightView"], lightView(viewport)); program->setUniformValue(uniformValues["scale"], scaleMatrix()); program->setUniformValue(uniformValues["eye"], QVector4D(viewport->eye())); program->setUniformValue(uniformValues["modelBillboard"], viewport->modelBillboard()); program->setUniformValue(uniformValues["slope"], _slope); program->setUniformValue(uniformValues["intercept"], _intercept); program->setUniformValue(uniformValues["windowCenter"], _windowCenter); program->setUniformValue(uniformValues["windowWidth"], _windowWidth); program->setUniformValue(uniformValues["huRange"], _huRange); program->setUniformValue(uniformValues["valueRange"], _valueRange); }