2016-03-20 46 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

相關問題