2016-03-20 14 views
-1

私はOpenGLプロジェクトをiOSに作成しようとしていますが、glViewportはその上で作業できません。iOS上で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内の任意のエフェクトを作る `tのないすべての変更を。

"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を呼び出す必要があることをテストしました。

純粋なEAGLViewを使用するには、いつものようにglViewportを使用する必要があります。

このスレッドでは回答が見つかりました:glViewport different result in Android and iOS

関連する問題