我正在学习OpenGLES,我正在尝试将一个GLKViewer放在UIViewController中。
我知道我可以通过使用GLViewController解决主要问题,但我正在尝试学习如何以这种方式实现。
我发现了这个问题,Nesting GLKView into UIViewController和Nested GLKView and 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
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
我是一个完全的菜鸟,所以我为任何愚蠢的疏忽道歉:)
答案 0 :(得分:11)
你没有说你在故事板中连接了MyGLController的glview属性,所以请验证。
接下来,您在加载后设置glview上下文。没有GLKViewController,没有什么可以告诉它需要绘制的glview。确保在设置上下文后在某处调用[self.glview setNeedsDisplay]
。
答案 1 :(得分:7)
我遇到了类似的问题。
默认情况下,xcode会将enable setNeedsDisplay
复选框设置为NO
属性列表中的GLKView
。
一旦我改变它,它就有用了。