我正在制作一个简单的游戏(使用“iPhone和iPad的傻瓜游戏开发”一书),但是我无法使它工作,我正在制作本书中使用的示例应用程序,所以我认为我有正确的。代码这里是我把对OpenGL ES代码中的问题正确使用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
的地方,我都会收到警告。
这个警告很明显,我怀疑你是否真的第一次试图解决问题。 – 2011-05-16 00:34:21
正如我所说,我对OpenGL一无所知。我正在使用这本书,所以我可以学到一点。然而,写这本书的人并没有对这些警告说任何话。 – Justin 2011-05-16 16:29:19
所以看Matias Valdenegro的回答。只是说我复制了本书中的所有内容,并没有让你不去思考,这些函数将什么作为参数,以及你调用它们的变量类型是什么。 – 2011-05-16 17:01:28