我正在製作一個簡單的遊戲(使用「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