2016-03-20 41 views
-1

我想让iOS的OpenGL项目,但glViewport无法工作。glViewport不能在iOS上工作

看看简单的代码示例:

- (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

glClear不尊重当前视口。如果要选择要清除的子区域,则需要set the scissor boxglScissor,然后使用glEnable(GL_SCISSOR_TEST)启用剪切。

+0

谢谢你,它的工作我所需要的。但是,glViewport的真正建议是什么?如果我评论它,屏幕上什么也不会改变。 –

+0

@EduardoDória:'glViewport'会影响渲染的图元:三角形,线条等。清除操作不会渲染图元。 –

0

我做了更多的研究,并测试了在使用GLKView创建OpenGL环境时,应该在每一帧调用glViewport。

要看glViewport照常工作需要使用纯EAGLView。

我发现回答了这一主题:glViewport different result in Android and iOS

相关问题