void LightSources::loadShader() { // Standardshader QOpenGLShaderProgram* standardShaderProg = new QOpenGLShaderProgram(); QOpenGLShader vertShader(QOpenGLShader::Vertex); vertShader.compileSourceFile(":/shader/lightsource.vert"); standardShaderProg->addShader(&vertShader); QOpenGLShader fragShader(QOpenGLShader::Fragment); fragShader.compileSourceFile(":/shader/lightsource.frag"); standardShaderProg->addShader(&fragShader); standardShaderProg->link(); // Sonnenshader this->shaderProgram = standardShaderProg; glEnable(GL_TEXTURE_2D); }
QOpenGLShaderProgram *generateShaderProgram(QObject *parent, QByteArray vsrc, QByteArray fsrc) { QOpenGLShaderProgram *program = new QOpenGLShaderProgram(parent); QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, program); vshader->compileSourceCode(vsrc); if (!vshader->compileSourceCode(vsrc)) qFatal("Error in vertex src:\n%s\n", vsrc.constData()); QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, program); if (!fshader->compileSourceCode(fsrc)) qFatal("Error in fragment src:\n%s\n", fsrc.constData()); program->addShader(vshader); program->addShader(fshader); if (!program->link()) qFatal("Error linking:\n%s\n%s\n", vsrc.constData(), fsrc.constData()); return program; }
// Build a passthrough glsl program QOpenGLShaderProgram* GLImageProcessor::buildPassthorughProgram() const { QOpenGLShaderProgram* prog = new QOpenGLShaderProgram(); QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, prog); const char *vsrc = "attribute highp vec4 in_Vertex;\n" "attribute mediump vec4 in_TexCoord;\n" "varying mediump vec4 texCoord;\n" "void main(void)\n" "{\n" " gl_Position = in_Vertex;\n" " texCoord = in_TexCoord;\n" "}\n"; vshader->compileSourceCode(vsrc); QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, prog); const char *fsrc = "uniform sampler2D in_Texture;\n" "varying mediump vec4 texCoord;\n" "void main(void)\n" "{\n" " gl_FragColor = texture2D(in_Texture, texCoord.st);\n" "}\n"; fshader->compileSourceCode(fsrc); prog->addShader(vshader); prog->addShader(fshader); prog->bindAttributeLocation("in_Vertex", 0); prog->bindAttributeLocation("in_TexCoord", 1); prog->link(); prog->bind(); prog->setUniformValue("in_Texture", 0); prog->release(); return prog; }