examples/opengl/hellogl_es2/glwidget.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    90    m_showBubbles = bubbles;
    90    m_showBubbles = bubbles;
    91 }
    91 }
    92 
    92 
    93 void GLWidget::paintQtLogo()
    93 void GLWidget::paintQtLogo()
    94 {
    94 {
       
    95     program1.enableAttributeArray(normalAttr1);
       
    96     program1.enableAttributeArray(vertexAttr1);
    95     program1.setAttributeArray(vertexAttr1, vertices.constData());
    97     program1.setAttributeArray(vertexAttr1, vertices.constData());
    96     program1.setAttributeArray(normalAttr1, normals.constData());
    98     program1.setAttributeArray(normalAttr1, normals.constData());
    97     glDrawArrays(GL_TRIANGLES, 0, vertices.size());
    99     glDrawArrays(GL_TRIANGLES, 0, vertices.size());
    98     program1.disableAttributeArray(normalAttr1);
   100     program1.disableAttributeArray(normalAttr1);
    99     program1.disableAttributeArray(vertexAttr1);
   101     program1.disableAttributeArray(vertexAttr1);
   157     };
   159     };
   158     program2.setAttributeArray(normalAttr2, afNormals, 3);
   160     program2.setAttributeArray(normalAttr2, afNormals, 3);
   159 
   161 
   160     program2.setUniformValue(textureUniform2, 0);    // use texture unit 0
   162     program2.setUniformValue(textureUniform2, 0);    // use texture unit 0
   161 
   163 
       
   164     program2.enableAttributeArray(vertexAttr2);
       
   165     program2.enableAttributeArray(normalAttr2);
       
   166     program2.enableAttributeArray(texCoordAttr2);
       
   167 
   162     glDrawArrays(GL_TRIANGLES, 0, 36);
   168     glDrawArrays(GL_TRIANGLES, 0, 36);
   163 
   169 
   164     program2.disableAttributeArray(vertexAttr2);
   170     program2.disableAttributeArray(vertexAttr2);
   165     program2.disableAttributeArray(normalAttr2);
   171     program2.disableAttributeArray(normalAttr2);
   166     program2.disableAttributeArray(texCoordAttr2);
   172     program2.disableAttributeArray(texCoordAttr2);
   171     glClearColor(0.1f, 0.1f, 0.2f, 1.0f);
   177     glClearColor(0.1f, 0.1f, 0.2f, 1.0f);
   172 
   178 
   173     glGenTextures(1, &m_uiTexture);
   179     glGenTextures(1, &m_uiTexture);
   174     m_uiTexture = bindTexture(QImage(":/qt.png"));
   180     m_uiTexture = bindTexture(QImage(":/qt.png"));
   175 
   181 
   176     QGLShader *vshader1 = new QGLShader(QGLShader::VertexShader, this);
   182     QGLShader *vshader1 = new QGLShader(QGLShader::Vertex, this);
   177     const char *vsrc1 =
   183     const char *vsrc1 =
   178         "attribute highp vec4 vertex;\n"
   184         "attribute highp vec4 vertex;\n"
   179         "attribute mediump vec3 normal;\n"
   185         "attribute mediump vec3 normal;\n"
   180         "uniform mediump mat4 matrix;\n"
   186         "uniform mediump mat4 matrix;\n"
   181         "varying mediump vec4 color;\n"
   187         "varying mediump vec4 color;\n"
   186         "    vec3 col = vec3(0.40, 1.0, 0.0);\n"
   192         "    vec3 col = vec3(0.40, 1.0, 0.0);\n"
   187         "    color = vec4(col * 0.2 + col * 0.8 * angle, 1.0);\n"
   193         "    color = vec4(col * 0.2 + col * 0.8 * angle, 1.0);\n"
   188         "    color = clamp(color, 0.0, 1.0);\n"
   194         "    color = clamp(color, 0.0, 1.0);\n"
   189         "    gl_Position = matrix * vertex;\n"
   195         "    gl_Position = matrix * vertex;\n"
   190         "}\n";
   196         "}\n";
   191     vshader1->compile(vsrc1);
   197     vshader1->compileSourceCode(vsrc1);
   192 
   198 
   193     QGLShader *fshader1 = new QGLShader(QGLShader::FragmentShader, this);
   199     QGLShader *fshader1 = new QGLShader(QGLShader::Fragment, this);
   194     const char *fsrc1 =
   200     const char *fsrc1 =
   195         "varying mediump vec4 color;\n"
   201         "varying mediump vec4 color;\n"
   196         "void main(void)\n"
   202         "void main(void)\n"
   197         "{\n"
   203         "{\n"
   198         "    gl_FragColor = color;\n"
   204         "    gl_FragColor = color;\n"
   199         "}\n";
   205         "}\n";
   200     fshader1->compile(fsrc1);
   206     fshader1->compileSourceCode(fsrc1);
   201 
   207 
   202     program1.addShader(vshader1);
   208     program1.addShader(vshader1);
   203     program1.addShader(fshader1);
   209     program1.addShader(fshader1);
   204     program1.link();
   210     program1.link();
   205 
   211 
   206     vertexAttr1 = program1.attributeLocation("vertex");
   212     vertexAttr1 = program1.attributeLocation("vertex");
   207     normalAttr1 = program1.attributeLocation("normal");
   213     normalAttr1 = program1.attributeLocation("normal");
   208     matrixUniform1 = program1.uniformLocation("matrix");
   214     matrixUniform1 = program1.uniformLocation("matrix");
   209 
   215 
   210     QGLShader *vshader2 = new QGLShader(QGLShader::VertexShader);
   216     QGLShader *vshader2 = new QGLShader(QGLShader::Vertex);
   211     const char *vsrc2 =
   217     const char *vsrc2 =
   212         "attribute highp vec4 vertex;\n"
   218         "attribute highp vec4 vertex;\n"
   213         "attribute highp vec4 texCoord;\n"
   219         "attribute highp vec4 texCoord;\n"
   214         "attribute mediump vec3 normal;\n"
   220         "attribute mediump vec3 normal;\n"
   215         "uniform mediump mat4 matrix;\n"
   221         "uniform mediump mat4 matrix;\n"
   220         "    vec3 toLight = normalize(vec3(0.0, 0.3, 1.0));\n"
   226         "    vec3 toLight = normalize(vec3(0.0, 0.3, 1.0));\n"
   221         "    angle = max(dot(normal, toLight), 0.0);\n"
   227         "    angle = max(dot(normal, toLight), 0.0);\n"
   222         "    gl_Position = matrix * vertex;\n"
   228         "    gl_Position = matrix * vertex;\n"
   223         "    texc = texCoord;\n"
   229         "    texc = texCoord;\n"
   224         "}\n";
   230         "}\n";
   225     vshader2->compile(vsrc2);
   231     vshader2->compileSourceCode(vsrc2);
   226 
   232 
   227     QGLShader *fshader2 = new QGLShader(QGLShader::FragmentShader);
   233     QGLShader *fshader2 = new QGLShader(QGLShader::Fragment);
   228     const char *fsrc2 =
   234     const char *fsrc2 =
   229         "varying highp vec4 texc;\n"
   235         "varying highp vec4 texc;\n"
   230         "uniform sampler2D tex;\n"
   236         "uniform sampler2D tex;\n"
   231         "varying mediump float angle;\n"
   237         "varying mediump float angle;\n"
   232         "void main(void)\n"
   238         "void main(void)\n"
   233         "{\n"
   239         "{\n"
   234         "    highp vec3 color = texture2D(tex, texc.st).rgb;\n"
   240         "    highp vec3 color = texture2D(tex, texc.st).rgb;\n"
   235         "    color = color * 0.2 + color * 0.8 * angle;\n"
   241         "    color = color * 0.2 + color * 0.8 * angle;\n"
   236         "    gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0);\n"
   242         "    gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0);\n"
   237         "}\n";
   243         "}\n";
   238     fshader2->compile(fsrc2);
   244     fshader2->compileSourceCode(fsrc2);
   239 
   245 
   240     program2.addShader(vshader2);
   246     program2.addShader(vshader2);
   241     program2.addShader(fshader2);
   247     program2.addShader(fshader2);
   242     program2.link();
   248     program2.link();
   243 
   249 
   282     modelview.rotate(m_fAngle, 0.0f, 0.0f, 1.0f);
   288     modelview.rotate(m_fAngle, 0.0f, 0.0f, 1.0f);
   283     modelview.scale(m_fScale);
   289     modelview.scale(m_fScale);
   284     modelview.translate(0.0f, -0.2f, 0.0f);
   290     modelview.translate(0.0f, -0.2f, 0.0f);
   285 
   291 
   286     if (qtLogo) {
   292     if (qtLogo) {
   287         program1.enable();
   293         program1.bind();
   288         program1.setUniformValue(matrixUniform1, modelview);
   294         program1.setUniformValue(matrixUniform1, modelview);
   289         paintQtLogo();
   295         paintQtLogo();
   290         program1.disable();
   296         program1.release();
   291     } else {
   297     } else {
   292         program2.enable();
   298         program2.bind();
   293         program1.setUniformValue(matrixUniform2, modelview);
   299         program1.setUniformValue(matrixUniform2, modelview);
   294         paintTexturedCube();
   300         paintTexturedCube();
   295         program2.disable();
   301         program2.release();
   296     }
   302     }
   297 
   303 
   298     glDisable(GL_DEPTH_TEST);
   304     glDisable(GL_DEPTH_TEST);
   299     glDisable(GL_CULL_FACE);
   305     glDisable(GL_CULL_FACE);
   300 
   306