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;
}
Example #3
0
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();
}
Example #7
0
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;
}
Example #9
0
kore::ShaderProgram::~ShaderProgram(void) {
  destroyProgram();
  destroyShaders();
}