OpenGL: ShaderProgram findet UniFormLocation nicht??
Verfasst: 4. März 2010 16:38
Moin,
ich versuche mit 2 Texturen einen ColorTable lookup zu machen. Hier enthält eine Textur die Daten und eine andere die zugeordneten Farbwert. Die Zuordnung soll von einem Fragment-Shader vorgenommen werden.
Dafür habe ich folgenden Fragment-Shadercode:
(Die Texturkoordinaten sind vom Debuggen, bitte nich wundern
)
Im paintGL() von meinem QGLWidget erstelle ich dann wie folgend das Shader-Programm:
Das Problem ist jetzt das m_ShaderProgramm.uniformLocation() ja die "Location" der Uniforms zurück geben soll. Bei der Daten-Textur tut sie auch, nach dem Aufruf ist DataTexLocation=0.... ABER ColorTexLocation=-1 ist ????
Aus der Qt-Referenz:
Ich versteh das nich!
ich versuche mit 2 Texturen einen ColorTable lookup zu machen. Hier enthält eine Textur die Daten und eine andere die zugeordneten Farbwert. Die Zuordnung soll von einem Fragment-Shader vorgenommen werden.
Dafür habe ich folgenden Fragment-Shadercode:
Code: Alles auswählen
m_sFrag = "uniform sampler3D DataTexture;";
m_sFrag += "uniform sampler1D ColorTable;";
m_sFrag += "void main()";
m_sFrag += "{";
m_sFrag += " vec4 vecpos = texture3D(DataTexture, vec3(0.0, 0.0, 0.0));";
m_sFrag += " float gray = (vecpos.r + vecpos.g + vecpos.b)/3;";
m_sFrag += " vec4 veccolor = texture1D(ColorTable, 0.0);";
m_sFrag += " gl_FragColor = vec4(gray, 0.0, 0.0, 1.0);";
m_sFrag += "};";Im paintGL() von meinem QGLWidget erstelle ich dann wie folgend das Shader-Programm:
Code: Alles auswählen
m_ShaderProgramm.addShaderFromSourceCode(QGLShader::Fragment, m_sFrag);
m_ShaderProgramm.link();
m_ShaderProgramm.bind();
int ColorTexLocation = m_ShaderProgramm.uniformLocation("ColorTable");
int DataTexLocation = m_ShaderProgramm.uniformLocation("DataTexture");
...Aus der Qt-Referenz:
Heisst also das der Name "ungültig" ist?! Aber warum der ColorTable-Sampler ist doch genauso deklariert wie der Daten-Sampler...int QGLShaderProgram::uniformLocation ( const QString & name ) const
This is an overloaded function.
Returns the location of the uniform variable name within this shader program's parameter list. Returns -1 if name is not a valid uniform variable for this shader program.
See also attributeLocation().
Ich versteh das nich!