没有调用glkView drawInRect

Jua*_*eno 9 iphone opengl-es objective-c ios opengl-es-2.0

我正在学习OpenGLES,我正在尝试将一个GLKViewer放在UIViewController中.

我知道我可以使用GLViewController解决主要问题,但我正在尝试学习如何以这种方式实现.

我发现了这个问题,将GLKView嵌入到UIViewController嵌套的GLKView和GLKViewController中但我必须遗漏一些东西,即使我认为我正在做所有正确的步骤,因为当我运行我的项目时,我没有进入drawInRect打印行.

在故事板中,我将ViewController指向glkview组件的委托.

我尽量保持代码尽可能简单,任何帮助都会被贬低:

MyController.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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

*更新*

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

如果我遗失了一些东西,我在这里上传了一个项目的副本:https://github.com/jcrogel/OpenGLDebug.git

我是一个完全的菜鸟,所以我为任何愚蠢的疏忽道歉:)

小智 11

你没有说你在故事板中连接了MyGLController的glview属性,所以验证一下.

接下来,您在加载后设置glview上下文.没有GLKViewController,没有什么可以告诉它需要绘制的glview.确保[self.glview setNeedsDisplay]在设置上下文后调用某个地方.

  • 那应该是:self.glview.enableSetNeedsDisplay = YES; (2认同)

小智 7

我遇到了类似的问题.

默认情况下,xcode将enable setNeedsDisplay复选框设置NOGLKView属性列表.
一旦我改变它,它就有效了.