9

我正在学习 OpenGLES,我正在尝试将 GLKViewer 放在 UIViewController 中。

我知道我可以通过使用 GLViewController 来解决主要问题,但我正在尝试学习如何做到这一点。

我发现了这个问题,Nesting GLKView into UIViewController and Nested GLKView and GLKViewController但即使我认为我正在执行所有正确的步骤,我也必须遗漏一些东西,因为当我运行我的项目时,我没有到达 drawInRect 打印线。

在情节提要中,我将 ViewController 指向 glkview 组件的代表。

我试图使代码尽可能简单,任何帮助都将不胜感激:

我的控制器.h

#import <Foundation/Foundation.h>
#import <GLKit/GLKit.h>

@interface MyGLController : UIViewController <GLKViewDelegate>
{
    GLuint vertexBufferID;

}

@property (weak, nonatomic) IBOutlet GLKView *glview;

@property (strong, nonatomic) GLKBaseEffect *baseEffect;

@end

MyGLController.m

#import "MyGLController.h"

@implementation MyGLController

//@synthesize baseEffect;

-(void) viewDidLoad{
    [super viewDidLoad];

    self.glview.context = [[EAGLContext alloc] initWithAPI:
     kEAGLRenderingAPIOpenGLES2];

     [EAGLContext setCurrentContext:self.glview.context];
    printf("View Loaded");
}


- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    printf("DrawInRect");
}

@end

* 更新 *

据我所知,glkview 已按照建议正确连接,并添加了 josh-knapp 并调用了 setNeedsDisplay。

万一我遗漏了什么,我已经在此处上传了该项目的副本:https ://github.com/jcrogel/OpenGLDebug.git

我在这方面完全是菜鸟,所以我为任何愚蠢的疏忽道歉:)

4

3 回答 3

11

你没有说你在情节提要中连接了 MyGLController 的 glview 属性,所以验证一下。

接下来,您将在加载后设置 glview 上下文。如果没有 GLKViewController,则无法告诉 glview 需要绘制它。[self.glview setNeedsDisplay]确保在设置上下文后 调用某处。

于 2012-11-12T16:56:48.140 回答
7

我有一个类似的问题。

默认情况下,xcode 将enable setNeedsDisplay复选框设置为NOGLKView属性列表中。
一旦我改变它,它就起作用了。

于 2014-01-09T09:32:43.917 回答
1

我看到这个问题已经回答了。但我遇到了同样的问题,但有不同的解决方案。我想我会在这里发布信息,以防其他人可能从中受益。

问题描述

在使用 GLKView 和 GLKViewController 时,渲染循环函数 (drawInRect) 会被调用一次,但不会再次调用。

可能的原因

CViewController 的一些方法被错误地实现,没有调用它们的超级。下面的代码说明了三个这样的函数。下面的示例正确实现了三个函数,调用了它们的超级函数。

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:NO];
}

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:NO];
}
-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:NO];
}
于 2013-01-07T07:10:51.243 回答