【发布时间】:2014-04-08 01:46:03
【问题描述】:
我正在关注这个 OpenGL ES 2.0 教程http://www.raywenderlich.com/3664/opengl-tutorial-for-ios-opengl-es-2-0,我正在尝试让屏幕清除为 glClearColor,但我看到的只是黑色。任何人都可以通过查看我的 GLView 来了解原因吗?
#import "GLView.h"
@implementation GLView
+ (Class)layerClass
{
return [CAEAGLLayer class];
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self setupLayer];
[self setupContext];
[self setupRenderBuffer];
[self setupFrameBuffer];
[self render];
}
return self;
}
- (void)setupLayer
{
m_eaglLayer = (CAEAGLLayer *)self.layer;
m_eaglLayer.opaque = YES;
}
- (void)setupContext
{
m_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!m_context) {
NSLog(@"Failed to initialize OpenGLES 2.0 context");
exit(1);
}
if (![EAGLContext setCurrentContext:m_context]) {
NSLog(@"Failed to set current OpenGL context");
exit(1);
}
}
- (void)setupRenderBuffer
{
glGenRenderbuffers(1, &m_colorRenderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_colorRenderBuffer);
[m_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:m_eaglLayer];
}
- (void)setupFrameBuffer
{
GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorRenderBuffer);
}
-(void)render
{
glClearColor(0, 104.0/255.0, 55.0/255.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0, 0, self.frame.size.width, self.frame.size.height);
[m_context presentRenderbuffer:GL_RENDERBUFFER];
}
@end
【问题讨论】:
-
尝试在清除之前调用 glViewport。同样在设置两个缓冲区后检查帧缓冲区状态。
-
首先调用 glViewport 不起作用。我打算使用 GLKView 我只是想知道为什么它不起作用。它与减去着色器和顶点数据的原始项目几乎完全相同。