Я делаю простую игру (использую книгу «Разработка игр для iPhone и iPad для чайников»), но не могу заставить ее работать. Я делаю пример приложения, которое используется в книге, поэтому я думаю, что у меня есть правильный код. Вот проблема.
Я вставил код для OpenGL ES, но получаю много предупреждений. Вот код.
.h файл:
#import <UIKit/UIKit.h>
#import <OpenGLES/ES2/gl.h>
#import <OpenGLES/ES2/glext.h>
#import <QuartzCore/QuartzCore.h>
#import <CoreGraphics/CoreGraphics.h>
@interface OpenGL : UIView {
EAGLContext *context;
GLuint *framebuffer;
GLuint *colorRenderBuffer;
GLuint *depthBuffer;
}
- (void) prepareOpenGL;
- (void) render;
@end
.m файл:
#import "OpenGL.h"
@implementation OpenGL
- (void) awakeFromNib; {
[self prepareOpenGL];
[self render];
}
- (void) prepareOpenGL; {
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:context];
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_RENDERBUFFER, framebuffer);
glGenRenderbuffers(1, &colorRenderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, colorRenderBuffer);
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, colorRenderBuffer);
GLint height, width;
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height);
glGenRenderbuffers(1, &depthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE) {
NSLog(@"Failed to create a complete render buffer!");
}
}
- (void) render; {
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glViewport(0, 0, self.bounds.size.width, self.bounds.size.height);
glClearColor(0.5, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glBindRenderbuffer(GL_RENDERBUFFER, colorRenderBuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];
}
+ (Class) layerClass; {
return [CAEAGLLayer class];
}
Это типы предупреждений, которые я получаю (я не могу вставить их все, потому что их много):
Passing argument 2 of 'glGenFramebuffers' from incompatible pointer type.
Passing argument 2 of 'glBindFramebuffers' from incompatible pointer type.
Passing argument 2 of 'glGenRenderbuffers' from incompatible pointer type.
Passing argument 2 of 'glBindRenderbuffers' from incompatible pointer type.
Итак, если все это вышло из книги, почему я получаю эти предупреждения? Я не импортирую нужные файлы? Я действительно не могу дать вам гораздо больше информации, чем это, потому что я понятия не имею, что вызвало это, и я совершенно новичок в OpenGL ES. Спасибо за любую помощь!
РЕДАКТИРОВАТЬ: Еще одна вещь. Я получаю предупреждения, где используются такие вещи, как glGenFramebuffers
.