QT图像未在IOS设备上呈现

时间:2017-03-16 09:19:32

标签: ios qt opengl-es

我只是加载图片并将它们渲染到屏幕上:

int oldFBO  = 0;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO);
glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
    glViewport(0, 0, _width, _height);

    glClearColor(0.0,0.0,0.0,1.0);
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
    glDisable(GL_DEPTH_TEST);


    _program.bind();

    glBindBuffer(GL_ARRAY_BUFFER, _vbo);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*3, (GLvoid*)0);

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, textureID);
    glUniform1i(glGetUniformLocation(_program.programId(), "u_texture"), 0);

    glDrawArrays(GL_TRIANGLES, 0, 6);
    glDisableVertexAttribArray(0);

加载图片:

QOpenGLTexture* depthImg;

if(!img.load(path.c_str()))
{
    qWarning("ERROR LOADING IMAGE");
    cout << "could not find the file: " << path << endl;
    return;
}else{
    cout << "loaded image: " << path << endl;
}

 depthImg = new QOpenGLTexture(img.mirrored());
 depthImg->setMinificationFilter(QOpenGLTexture::Nearest);
 depthImg->setMagnificationFilter(QOpenGLTexture::Linear);

此应用程序在QT 5.8.0上运行,适用于CPU版本。如果我测试IOS模拟器,一切都可以接受,只能在OpenGlWidget的左下角进行渲染。

但如果我在我的iPhone设备(Iphone 5s)上运行该应用程序,它将不会显示任何图像。控制台说图像已加载但屏幕上没有显示任何内容。此外,未检测到GLerror或构建着色器的错误。

另外一点不同的是,模拟器构建了一个版本:

OpenGL Context版本:3,0

GL_SHADING_LANGUAGE_VERSION:OpenGL ES GLSL ES 3.00

在我的iPhone上说:

OpenGL Context版本:2,0

GL_SHADING_LANGUAGE_VERSION:OpenGL ES GLSL ES 1.00

着色器实际上应该适用于所有人:

    /* final.fsh */

uniform highp sampler2D u_texture;
varying highp vec4 qt_TexCoord0;

void main(void)
{
    gl_FragColor = vec4(texture2D(u_texture, qt_TexCoord0.xy).xyz,1.0);
}

    /* final.vsh */

attribute highp vec3 a_position;

varying highp vec4 qt_TexCoord0;

void main(void)
{


    const mat4 B = mat4(0.5,  0.0, 0.0, 0.0,
                            0.0,  0.5, 0.0, 0.0,
                            0.0,  0.0, 0.5, 0.0,
                            0.5,  0.5, 0.5, 1.0);

    qt_TexCoord0 = B * vec4(a_position, 1.0);
    gl_Position =  vec4(a_position, 1.0);
}

我也尝试使用:

强制主函数中的glFormat
QSurfaceFormat glFormat;
glFormat.setVersion(2, 1);
glFormat.setDepthBufferSize(24);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(glFormat);

我不知道为什么在模拟器中构建没有问题,但在设备上没有显示任何内容

0 个答案:

没有答案