ios - 为什么我的自定义 View 不可见?

标签 ios objective-c opengl-es

我有一个如下所示的自定义 View :

@interface OpenGLCopy () {
    CAEAGLLayer *_eaglLayer;
    EAGLContext *_context;
    GLuint _colorRenderBuffer;
}
@end

@implementation OpenGLCopy

#pragma mark - life cycle
- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self setupLayer];
        [self setupContext];
        [self setupRenderBuffer];
        [self setupFrameBuffer];

        [self render];
    }
    return self;
}


#pragma mark - override
+ (Class)layerClass {
    return [CAEAGLLayer class];
}

#pragma mark - private helper
- (void)setupLayer {
    _eaglLayer = (CAEAGLLayer *)self.layer;
    _eaglLayer.opaque = YES;
}

- (void)setupContext {
    _context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
    if (!_context) {
        NSLog(@"failed to initialize OpenGLES 2.0 context");
        return ;
    }

    if (![EAGLContext setCurrentContext:_context]) {
        NSLog(@"failed to set current OpenGL context");
        return ;
    }
}


- (void)setupRenderBuffer {
    glGenRenderbuffers(1, &_colorRenderBuffer);
    glBindBuffer(GL_RENDERBUFFER, _colorRenderBuffer);
    [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_eaglLayer];
}


- (void)setupFrameBuffer {
    GLuint frameBuffer;
    glGenFramebuffers(1, &frameBuffer);
    glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, _colorRenderBuffer);
}


- (void)render {
    glClearColor(0, 104.0/255.0, 55.0/255.0, 1.0);
    glClearColor(1, 1, 1, 1);
    glClear(GL_COLOR_BUFFER_BIT);

    [_context presentRenderbuffer:GL_RENDERBUFFER];
}

@end

但是当我初始化这个 View 并将它添加到 Controller 的 View 中时,我看不到我的自定义 View 。当我使用 View 层次结构进行调试时,自定义 View 实际上位于顶部。 谁能告诉我为什么?

最佳答案

您应该使用 glGetError() 检查代码中的错误。这至少可以帮助您查明问题。

通过这样做我发现你的错误其实很小。绑定(bind)渲染缓冲区时,您正在调用 glBindBuffer。您需要使用 glBindRenderbuffer 所以只需替换

glBindBuffer(GL_RENDERBUFFER, _colorRenderBuffer);

glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer);

关于ios - 为什么我的自定义 View 不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44653131/

相关文章:

c++ - OGL ESv2 中的同一游戏不适用于 OGL3

iOS-如何在限制范围内绘画

ios - 在 iOS 中使用 SecRandomCopyBytes( ) 的随机 256 位 key

objective-c - 如何不使用 dequeueReusableCellWithIdentifier?

objective-c - 为什么这个 subview 没有被删除?

iphone - iOS - 使用 UIBezierPath appendPath 剪切两个路径的并集

Android MediaCodec 输出格式 : GLES External Texture (YUV/NV12) to GLES Texture (RGB)

iphone - UINavigationController 方向更改中的 ViewController

iphone - torch 模式和闪光模式之间的区别?

objective-c - 在 UIView 中查找特定点