找回密码
 立即注册
收起左侧

Qt Creator 快速入门 第3版 实例12-2运行图像不显示

1
回复
7100
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2018-6-21 10:08:29 显示全部楼层 |阅读模式
1Qter豆
具体问题如下 win7 32系统:

Starting D:\app\src\12\12-1\build-myopengl-Desktop_Qt_5_6_1_MinGW_32bit-Debug\debug\myopengl.exe...
create: Could not initialize EGL display: error 0x3001

create: When using ANGLE, check if d3dcompiler_4x.dll is available

QOpenGLShader::compile(Vertex): 0:2(1): error: `in' qualifier in declaration of `vPosition' only valid for function parameters in GLSL 1.10



*** Problematic Vertex shader source code ***

#define lowp

#define mediump

#define highp

#line 1

in vec4 vPosition;                  

void main(){                        

   gl_Position=vPosition;            

}                                      



***

QOpenGLShader::link: "error: linking with uncompiled shader"

QOpenGLShader::link: "error: linking with uncompiled shader"

QOpenGLShaderProgram::attributeLocation( vPosition ): shader program is not linked

QOpenGLShaderProgram::attributeLocation( vPosition ): shader program is not linked

D:\app\src\12\12-1\build-myopengl-Desktop_Qt_5_6_1_MinGW_32bit-Debug\debug\myopengl.exe exited with code 0

回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-6-21 17:23:58 显示全部楼层
部分源代码:
void MyOpenGLWidget::initializeGL()
{
    initializeOpenGLFunctions();
    //"   gl_Position=vec4(0.0,0.0,0.0,1.0);\n"
    QOpenGLShader *vshader=new QOpenGLShader(QOpenGLShader::Vertex,this);
    const char *vsrc=
            "in vec4 vPosition;                   \n"
            "in vec4 vColor;                      \n"
            "out vec4 color;                      \n"
            "void main(){                         \n"
            "   color=vColor;                      \n"
            "   gl_Position=vPosition;             \n"
            "}                                      \n";
    vshader->compileSourceCode(vsrc);

    //"   gl_FragColor=vec4(1.0,1.0,1.0,1.0);\n"
    QOpenGLShader *fshader=new QOpenGLShader(QOpenGLShader::Fragment,this);
    const char *fsrc=
            "in vec4 color;                      \n"
            "out vec4 fColor;                     \n"
            "void main(){                         \n"
            "   fColor=color;                      \n"
            "}                                      \n";
    fshader->compileSourceCode(fsrc);

    program=new QOpenGLShaderProgram;
    program->addShader(vshader);
    program->addShader(fshader);
    program->link();
    program->bind();

}

void MyOpenGLWidget::resizeGL(int,int)
{

}

void MyOpenGLWidget::paintGL()
{
    //glDrawArrays(GL_POINTS,0,1);
    int w=width();
    int h=height();
    int side=qMin(w,h);
    glViewport((w-side)/2,(h-side)/2,side,side);

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    GLfloat vertices[]={
        -0.8f,0.8f,
        -0.8f,-0.8f,
        0.8f,-0.8f,
        0.8f,0.8f
    };

    vbo.create();
    vbo.bind();
    //vbo.allocate(vertices,8*sizeof(GLfloat));
    vbo.allocate(vertices,20*sizeof(GLfloat));

    GLuint vPosition=program->attributeLocation("vPosition");
    //glVertexAttribPointer(vPosition,2,GL_FLOAT,GL_FALSE,0,vertices);
    program->setAttributeBuffer(vPosition,GL_FLOAT,0,2,0);
    glEnableVertexAttribArray(vPosition);

    GLfloat colors[]={
        1.0f,0.0f,0.0f,
        0.0f,1.0f,0.0f,
        0.0f,0.0f,1.0f,
        1.0f,1.0f,1.0f
    };
    vbo.write(8*sizeof(GLfloat),colors,12*sizeof(GLfloat));
    GLuint vColor=program->attributeLocation("vColor");
    program->setAttributeBuffer(vColor,GL_FLOAT,8*sizeof(GLfloat),3,0);
    glEnableVertexAttribArray(vColor);
    glDrawArrays(GL_TRIANGLE_FAN,0,4);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了