Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 添加视网膜显示支持将导致OpenGL ES不绘制任何内容_Iphone_Ios_Opengl Es_Ios Simulator_Retina Display - Fatal编程技术网

Iphone 添加视网膜显示支持将导致OpenGL ES不绘制任何内容

Iphone 添加视网膜显示支持将导致OpenGL ES不绘制任何内容,iphone,ios,opengl-es,ios-simulator,retina-display,Iphone,Ios,Opengl Es,Ios Simulator,Retina Display,我有一个在OpenGL ES 2.0中绘制场景的应用程序。 在iPhone和iPad模拟器中,以及在真实设备上,只要我不尝试使用视网膜显示器,一切都能正确渲染。视网膜设备仍在绘图,但分辨率与旧设备相同 在新设备上,我只有一个黑屏。在视网膜模拟器上,我得到一个粉红色的屏幕。 程序甚至不会使用我用glClearColor()设置的值 我可以使用以下代码正确设置设备的比例因子: _eaglLayer = (CAEAGLLayer *)self.layer; _eaglLayer.opaque = YE

我有一个在OpenGL ES 2.0中绘制场景的应用程序。 在iPhone和iPad模拟器中,以及在真实设备上,只要我不尝试使用视网膜显示器,一切都能正确渲染。视网膜设备仍在绘图,但分辨率与旧设备相同

在新设备上,我只有一个黑屏。在视网膜模拟器上,我得到一个粉红色的屏幕。 程序甚至不会使用我用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


我尝试了许多不同的解决方案和设置比例因子的方法,但都没有效果。我知道有些东西我只是看不见,但我找不到。建议?

我也面临同样的问题。调用
eaglayer.contentsCale=[[UIScreen mainScreen]scale]并且您必须将框架尺寸与屏幕比例相乘。因此,您的问题的解决方案是:

CGFloat screenScale = [UIScreen mainScreen].scale;
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, CGRectGetWidth(self.bounds) * screenScale, CGRectGetHeight(self.bounds) * screenScale);

其他人提到没有必要调用eaglayer.contentsCale,但出于某种原因,这只在我调用它时起作用。我在UIView子类中使用了以下代码,渲染在所有设备上都能很好地工作:

CGFloat scale = [[UIScreen mainScreen] scale];

_eaglLayer.contentsScale = scale;
[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];

CGSize s = self.frame.size;
glViewport(0, 0, s.width * scale, s.height * scale);