我只是加载图片并将它们渲染到屏幕上:
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);
}
我也尝试使用:
强制主函数中的glFormatQSurfaceFormat glFormat;
glFormat.setVersion(2, 1);
glFormat.setDepthBufferSize(24);
glFormat.setProfile(QSurfaceFormat::CoreProfile);
QSurfaceFormat::setDefaultFormat(glFormat);
我不知道为什么在模拟器中构建没有问题,但在设备上没有显示任何内容