OpenGLES2DView.m
上传用户:jjjjag8
上传日期:2017-04-17
资源大小:1443k
文件大小:2k
- //
- // OpenGLES2DView.m
- // GLFun
- //
- // Created by Jeff LaMarche on 8/5/08.
- // Copyright 2008 __MyCompanyName__. All rights reserved.
- //
- #import "OpenGLES2DView.h"
- @implementation OpenGLES2DView
- + (Class) layerClass
- {
- return [CAEAGLLayer class];
- }
- #pragma mark -
- - (BOOL)createFramebuffer {
-
- glGenFramebuffersOES(1, &viewFramebuffer);
- glGenRenderbuffersOES(1, &viewRenderbuffer);
-
- glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
- glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
- [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
- glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
-
- glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
- glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
-
- if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) {
- NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
- return NO;
- }
-
- return YES;
- }
- - (id)initWithCoder:(NSCoder*)coder
- {
- if((self = [super initWithCoder:coder])) {
- // Get the layer
- CAEAGLLayer *eaglLayer = (CAEAGLLayer*) self.layer;
- eaglLayer.opaque = YES;
- eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
- [NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGB565, kEAGLDrawablePropertyColorFormat, nil];
- context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
-
- if(!context || ![EAGLContext setCurrentContext:context] || ![self createFramebuffer]) {
- [self release];
- return nil;
- }
-
- glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
- glViewport(0, 0, backingWidth, backingHeight);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrthof(0, self.frame.size.width, 0, self.frame.size.height, -1, 1);
- glMatrixMode(GL_MODELVIEW);
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
- glEnableClientState (GL_VERTEX_ARRAY);
- glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
- [context presentRenderbuffer:GL_RENDERBUFFER_OES];
-
-
- glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_TEXTURE_2D);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- }
-
- return self;
- }
- - (void)dealloc {
- [super dealloc];
- }
- @end