我试图在iOS上制作一个OpenGL项目,但glViewport无法使用它。
看一下简单的代码示例:
- (void)viewDidLoad
{
[super viewDidLoad];
EAGLContext *context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:context];
const CGRect frame = [[UIScreen mainScreen] bounds];
//GLKView *glView = [[GLKView alloc] initWithFrame:CGRectMake(100, 100, 300, 300)];
GLKView* glView = [[GLKView alloc] initWithFrame:frame context:context];
[self.view addSubview:glView];
GLuint renderbuffer;
glGenRenderbuffers(1, &renderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)glView.layer];
GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer);
// Set the viewport
glViewport(100, 100, 300, 300);
// Clear
glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
// Present renderbuffer
[context presentRenderbuffer:GL_RENDERBUFFER];
}
我在glViewport中所做的任何更改都不会产生任何影响。
但是如果我添加" initWithFrame:CGRectMake(100,100,300,300)"它会工作,但我真的需要glViewport。
我做错了什么?
答案 0 :(得分:0)
glClear
不尊重当前视口。如果要选择要清除的子区域,则需要set the scissor box和glScissor
,然后使用glEnable(GL_SCISSOR_TEST)
启用剪裁。
答案 1 :(得分:0)
我进行了更多的研究和测试,当使用GLKView创建OpenGL环境时,应该在每一帧上调用glViewport。
要看到glViewport正常工作,需要使用纯EAGLView。
我在这个帖子中找到了答案:glViewport different result in Android and iOS