iPhone上的OpenGL ES可能出现Retina问题?
这可能与我的另一个未解之谜有关。
我正在使用真实设备和模拟器在iPhone上绘制Orthographic 2d。 我试图给我的像素着色一个给定的颜色取决于它们与’A’的像素空间中的任意点的距离,我传入(硬编码)。 我正在做Retina 960×640分辨率的一切。 我计算从A到gl_FragCoord
距离,我根据2种颜色之间的跳跃进行着色,其中“max”是300px距离。
当在模拟器上(带有视网膜显示器)时,我需要为屏幕中点X给出一个“460”像素的中心点.YI给出160px,我寻找’300’px的距离..以便在设备I上获得相同的效果需要960X的中心和150的距离才能得到相同的结果(有趣的是,px 80并没有给出我想要的相同结果,但160可能是原始的超调…)
显然,视网膜问题正在发挥作用。 但是我在哪里,如何以及如何找到并修复它?
我在用着:
glViewport(0, 0, 960.0f, 640.0f);
和:
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &framebufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &framebufferHeight);
和:
[self setView:[[EAGLView alloc] initWithFrame:[UIScreen mainScreen].bounds]];
[(EAGLView *)[self view] setContentScaleFactor:2.0f];
你不应该硬编码“glViewport(0,0,960.0f,640.0f);”,以这种方式设置视口:
glViewport(0, 0, framebufferWidth, framebufferHeight);
也不要硬编码内容比例,你可以找到内容比例:
float contentScale = 1.0f; if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)]) { contentScale = [[UIScreen mainScreen] scale]; }
关于像素距离,因为您希望距离是视网膜显示的双倍,您可以使用内容比例为着色器添加制服。
现在iOS设备可以有多个不同的屏幕, UIWindow
可以放在非主屏幕上。 在这种情况下,您可以使用self.view.window.screen.scale
动态获取当前屏幕的比例。
- 以编程方式添加选项卡栏控制器到当前应用程序stream程
- 自定义节标题formsxib的错误宽度
- Xcode 9快捷键
- 从Firebase中检索数据后,如何将检索到的数据从一个视图控制器发送到另一个视图控制器?
- UISegmentedControl错误的dividerImage
- iOS开发:更新我的iPhone 4到iOS 4.3 Beta 3后,我的应用程序说“这个游戏不被Game Center识别”
- isOrientationSupported已在IOS中弃用
- 在运行时创buildpopup视图锚的button
- 继续在Apple的VerifyReceipt上得到21002'java.lang.NullPointerException'