我有一个在 OpenGL ES 2.0 中绘制场景的应用程序。只要我不尝试使用视网膜显示器,一切都可以在 iPhone 和 iPad 模拟器以及真实设备上正确呈现。Retina 设备仍可绘制,但分辨率与旧设备相同。
在新设备上,我只得到一个黑屏。在视网膜模拟器上,我得到一个粉红色的屏幕。程序甚至不会使用我用 glClearColor(); 设置的值;
我可以使用以下代码正确设置设备的比例因子:
_eaglLayer = (CAEAGLLayer *)self.layer;
_eaglLayer.opaque = YES;
self.contentScaleFactor = [[UIScreen mainScreen] scale];
_eaglLayer.contentsScale = [[UIScreen mainScreen] scale];
我可以在这里正确地创建一个渲染缓冲区:
glGenRenderbuffers(1, &_depthRenderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _depthRenderBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, self.frame.size.width, self.frame.size.height);
//Context is an instance of EAGLContext
[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];
我将视口的大小设置如下:
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_backingWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &_backingHeight);
...
glViewport(0, 0, _backingWidth, _backingHeight);
所有这些代码都可以在旧设备上运行,如果我注释掉这些行,它可以完美运行:
self.contentScaleFactor = [[UIScreen mainScreen] scale];
_eaglLayer.contentsScale = [[UIScreen mainScreen] scale];
我已经在视图加载时记录了比例,它在视网膜设备上正确地将值设置为 2.0,在旧设备上正确设置为 1.0。
我尝试了许多不同的解决方案和设置比例因子的方法,但无济于事。我知道有些东西我只是没看到,但我找不到。建议?