2012-08-16 86 views
1

我想获得一个OpenGL项目正确呈现到iPhone视网膜显示,我似乎遇到了一些困难。我已经为设备设置了内容缩放因子,但现在帧缓冲区未能创建。Open GL ES视网膜显示设置

这些都是在EAGLView int的createFramebuffer方法的子类中完成的。

这是我的设置:

glGenFramebuffersOES(1,& viewFramebuffer); glGenRenderbuffersOES(1,& viewRenderbuffer);

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 

self.contentScaleFactor = [[UIScreen mainScreen] scale]; 
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; 
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); 


glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); 
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);//Depth 
glGenRenderbuffersOES(1, &depthRenderbuffer); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); 
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight); 
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); 


glEnable(GL_DEPTH_TEST); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glEnable(GL_BLEND); 



NSLog(@"scale Factor: %f",self.contentScaleFactor); 

比例因子报告正确,但显示不会呈现,并且缓冲区无法创建。我在这里错过了什么吗?

+0

backingWidth和backingHeight在结尾处有什么值?这些视图的像素大小是否正确?你是通过'glCheckFramebufferStatus(GL_FRAMEBUFFER)'还是另一种方式检查framebuffer的状态? – 2012-08-16 20:06:29

+0

检查我得到的值:比例因子:2.000000 backingWidth:640 backingHeight:960。这些是我的显示器的正确尺寸。而glCheckFramebufferStatus(GL_FRAMEBUFFER)不会返回GL_FRAMEBUFFER_COMPLETE_OES。 – jcb344 2012-08-16 20:30:19

+0

@ jcb344我遇到类似的问题,你解决了这个问题吗? – rraallvv 2013-03-24 05:23:43

回答

0

我遇到了同样的问题。你只需要将屏幕尺寸乘以屏幕比例就可以了,如我在this答案中所述。