【问题标题】:OpenGL UIView only displaying blackOpenGL UIView 只显示黑色
【发布时间】: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。同样在设置两个缓冲区后检查帧缓冲区状态。
  • 更好的是,除非您使用需要管理自己的帧缓冲区的高级(通常是多通道)渲染技术,否则请使用GLKView,这样您就不必担心帧缓冲区设置问题。 (如果你喜欢 RW 教程,试试this one。)
  • 首先调用 glViewport 不起作用。我打算使用 GLKView 我只是想知道为什么它不起作用。它与减去着色器和顶点数据的原始项目几乎完全相同。

标签: ios uiview opengl-es


【解决方案1】:

我发现了问题。我从未在应用程序委托中初始化 UIWindow。

【讨论】:

    猜你喜欢
    • 2012-07-14
    • 1970-01-01
    • 2013-12-12
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多