src/opengl/gl2paintengineex/qglengineshadermanager.cpp
branchRCL_3
changeset 5 d3bac044e0f0
parent 4 3b1da2848fc7
equal deleted inserted replaced
4:3b1da2848fc7 5:d3bac044e0f0
   182 
   182 
   183     simpleShaderProg = new QGLShaderProgram(context, this);
   183     simpleShaderProg = new QGLShaderProgram(context, this);
   184     simpleShaderProg->addShader(vertexShader);
   184     simpleShaderProg->addShader(vertexShader);
   185     simpleShaderProg->addShader(fragShader);
   185     simpleShaderProg->addShader(fragShader);
   186     simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);
   186     simpleShaderProg->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);
       
   187     simpleShaderProg->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR);
       
   188     simpleShaderProg->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR);
       
   189     simpleShaderProg->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR);
   187     simpleShaderProg->link();
   190     simpleShaderProg->link();
   188     if (!simpleShaderProg->isLinked()) {
   191     if (!simpleShaderProg->isLinked()) {
   189         qCritical() << "Errors linking simple shader:"
   192         qCritical() << "Errors linking simple shader:"
   190                     << simpleShaderProg->log();
   193                     << simpleShaderProg->log();
   191     }
   194     }
   322         newProg->program->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);
   325         newProg->program->bindAttributeLocation("vertexCoordsArray", QT_VERTEX_COORDS_ATTR);
   323         if (newProg->useTextureCoords)
   326         if (newProg->useTextureCoords)
   324             newProg->program->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR);
   327             newProg->program->bindAttributeLocation("textureCoordArray", QT_TEXTURE_COORDS_ATTR);
   325         if (newProg->useOpacityAttribute)
   328         if (newProg->useOpacityAttribute)
   326             newProg->program->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR);
   329             newProg->program->bindAttributeLocation("opacityArray", QT_OPACITY_ATTR);
       
   330         if (newProg->usePmvMatrix) {
       
   331             newProg->program->bindAttributeLocation("pmvMatrix1", QT_PMV_MATRIX_1_ATTR);
       
   332             newProg->program->bindAttributeLocation("pmvMatrix2", QT_PMV_MATRIX_2_ATTR);
       
   333             newProg->program->bindAttributeLocation("pmvMatrix3", QT_PMV_MATRIX_3_ATTR);
       
   334         }
   327 
   335 
   328         newProg->program->link();
   336         newProg->program->link();
   329         if (!newProg->program->isLinked()) {
   337         if (!newProg->program->isLinked()) {
   330             QLatin1String none("none");
   338             QLatin1String none("none");
   331             QLatin1String br("\n");
   339             QLatin1String br("\n");
   422     static const char *uniformNames[] = {
   430     static const char *uniformNames[] = {
   423         "imageTexture",
   431         "imageTexture",
   424         "patternColor",
   432         "patternColor",
   425         "globalOpacity",
   433         "globalOpacity",
   426         "depth",
   434         "depth",
   427         "pmvMatrix",
       
   428         "maskTexture",
   435         "maskTexture",
   429         "fragmentColor",
   436         "fragmentColor",
   430         "linearData",
   437         "linearData",
   431         "angle",
   438         "angle",
   432         "halfViewportSize",
   439         "halfViewportSize",
   741     } else {
   748     } else {
   742         requiredProgram.mainVertexShader = QGLEngineSharedShaders::MainVertexShader;
   749         requiredProgram.mainVertexShader = QGLEngineSharedShaders::MainVertexShader;
   743     }
   750     }
   744     requiredProgram.useTextureCoords = texCoords;
   751     requiredProgram.useTextureCoords = texCoords;
   745     requiredProgram.useOpacityAttribute = (opacityMode == AttributeOpacity);
   752     requiredProgram.useOpacityAttribute = (opacityMode == AttributeOpacity);
       
   753     requiredProgram.usePmvMatrix = true;
   746 
   754 
   747     // At this point, requiredProgram is fully populated so try to find the program in the cache
   755     // At this point, requiredProgram is fully populated so try to find the program in the cache
   748     currentShaderProg = sharedShaders->findProgramInCache(requiredProgram);
   756     currentShaderProg = sharedShaders->findProgramInCache(requiredProgram);
   749 
   757 
   750     if (currentShaderProg) {
   758     if (currentShaderProg) {