void OpenGLWidget::createShaders(){ destroyShaders(); QString vertexShaderFile [] = { ":/original.vert", ":/edgedetection.vert", ":/gaussianblur.vert", ":/bloom.vert", ":/gammacorrection.vert", ":/toon.vert", ":/fisheye.vert", ":/billboard.vert" }; QString fragmentShaderFile [] = { ":/original.frag", ":/edgedetection.frag", ":/gaussianblur.frag", ":/bloom.frag", ":/gammacorrection.frag", ":/toon.frag", ":/fisheye.frag", ":/billboard.frag" }; shaderProgram = new QOpenGLShaderProgram; shaderProgram->addShaderFromSourceCode(QOpenGLShader::Vertex,FileOperationsFromResource::readFile(vertexShaderFile[currentShader])); shaderProgram->addShaderFromSourceCode(QOpenGLShader::Fragment,FileOperationsFromResource::readFile(fragmentShaderFile[currentShader])); if(!shaderProgram->link()){ qWarning() << shaderProgram->log() << endl; } }
//////////////////////////////////////////////////////////////////////////////// // SoftShadowsRenderer::createShaders() //////////////////////////////////////////////////////////////////////////////// bool SoftShadowsRenderer::createShaders() { destroyShaders(); // Shadow map shader m_shadowMapShader = new ShadowMapShader(); CHECK_GL_ERROR(); if (!m_shadowMapShader) return false; m_shadowMapShader->enable(); m_shadowMapShader->disable(); CHECK_GL_ERROR(); // Visualize depth texture shader m_visTexShader = new VisTexShader(); CHECK_GL_ERROR(); if (!m_visTexShader) return false; m_visTexShader->enable(); m_visTexShader->setShadowMapTexture(ShadowDepthTextureUnit); m_visTexShader->disable(); CHECK_GL_ERROR(); // Depth prepass shader m_depthPrepassShader = new DepthPrepassShader(); CHECK_GL_ERROR(); if (!m_depthPrepassShader) return false; m_depthPrepassShader->enable(); m_depthPrepassShader->disable(); CHECK_GL_ERROR(); // PCSS shader m_pcssShader = new PcssShader(); CHECK_GL_ERROR(); if (!m_pcssShader) return false; m_pcssShader->enable(); m_pcssShader->setShadowMapTexture(ShadowDepthTextureUnit, ShadowPcfTextureUnit); m_pcssShader->setGroundDiffuseTexture(GroundDiffuseTextureUnit); m_pcssShader->setGroundNormalTexture(GroundNormalTextureUnit); m_pcssShader->setRockDiffuseTexture(RockDiffuseTextureUnit); m_pcssShader->setPodiumCenterLocation(m_podiumMesh->getCenter()); m_pcssShader->disable(); CHECK_GL_ERROR(); // Update the light size updateLightCamera(); CHECK_GL_ERROR(); return true; }
DBobView::~DBobView(){ GlobalShaderCache().detachRenderable( *this ); destroyShaders(); if ( path ) { delete[] path; } g_PathView = NULL; }
NormalBlendedDecal::~NormalBlendedDecal() { for (int idx = 0; idx < NUM_DECAL_BLENDS; ++idx) { glDeleteTextures(1, &mDecalNormals[idx]); } destroyShaders(); destroyBuffers(); LOGI("NormalBlendedDecal: destroyed\n"); }
//////////////////////////////////////////////////////////////////////////////// // SoftShadowsRenderer::~SoftShadowsRenderer() //////////////////////////////////////////////////////////////////////////////// SoftShadowsRenderer::~SoftShadowsRenderer() { destroyShaders(); destroyMeshInstances(); }
void NormalBlendedDecal::reloadShaders() { destroyShaders(); buildShaders(); }
bool Shader::compile(std::vector<std::string> *defines) { GLuint vertShader = 0, fragShader = 0; // realease old shader program object if one exists if(mProgram) { glDeleteProgram(mProgram); mProgram = 0; } // create shader program mProgram = glCreateProgram(); // create and compile vertex shader if(!compileShader(&vertShader, GL_VERTEX_SHADER, mVertexSource, defines)) { destroyShaders(vertShader, fragShader, mProgram); return false; } // create and compile fragment shader if(!compileShader(&fragShader, GL_FRAGMENT_SHADER, mFragmentSource, defines)) { destroyShaders(vertShader, fragShader, mProgram); return false; } // attach vertex shader to program glAttachShader(mProgram, vertShader); // attach fragment shader to program glAttachShader(mProgram, fragShader); // bind attribute locations // this needs to be done prior to linking glBindAttribLocation(mProgram, SA_POSITION, "position"); glBindAttribLocation(mProgram, SA_NORMAL, "normal"); glBindAttribLocation(mProgram, SA_COLOR, "color"); glBindAttribLocation(mProgram, SA_TEXTURE0, "texCoord"); glBindAttribLocation(mProgram, SA_TEXTURE0, "texCoord0"); glBindAttribLocation(mProgram, SA_TEXTURE1, "texCoord1"); glBindAttribLocation(mProgram, SA_TEXTURE2, "texCoord2"); // link program if (!linkProgram(mProgram)) { destroyShaders(vertShader, fragShader, mProgram); return false; } // release vertex and fragment shaders if (vertShader) { glDeleteShader(vertShader); vertShader = 0; } if (fragShader) { glDeleteShader(fragShader); fragShader = 0; } return true; }
OpenGLWidget::~OpenGLWidget(){ destroyVBOs(); destroyShaders(); if(imgOrig) delete imgOrig; }
kore::ShaderProgram::~ShaderProgram(void) { destroyProgram(); destroyShaders(); }