我有一个如下所示的自定义 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/