对于我的非应用商店应用,我一直在使用私有框架 Core Surface 直接绘制到 iPhone 的屏幕上。但是,这在旧设备上可能会相当慢,因为它大量使用 CPU 进行绘图。为了解决这个问题,我决定尝试使用 OpenGLES 将像素渲染到屏幕上。
目前(我无法更改),我引用了一个名为 BaseAddress 的无符号短 * 变量,并且基本的第 3 方代码访问 BaseAddress 并使用新的像素数据对其进行更新。
我已经设置了一个 GLKViewController,并按如下方式实现了 viewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
[EAGLContext setCurrentContext:self.context];
GLKView *view = (GLKView *)self.view;
view.context = self.context;
glGenBuffers(1, &screenBuffer);
glBindBuffer(GL_ARRAY_BUFFER, screenBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(BaseAddress), BaseAddress, GL_DYNAMIC_DRAW);
}
其中 screenBuffer 是一个实例变量。在 glkView:drawInRect: 方法中,我有以下内容:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glDrawElements(GL_ARRAY_BUFFER, sizeof(BaseAddress)/sizeof(BaseAddress[0]), GL_UNSIGNED_SHORT, BaseAddress);
}
不幸的是,当我运行该应用程序时,只出现一个黑屏。如果我重新使用 Core Surface,该应用程序运行良好。所以基本上,我如何使用 OpenGLES 将像素绘制到屏幕上?