Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // GameController.m
- //
- // Created by Sidharth Juyal on 13/01/12.
- // Copyright (c) 2012 whackylabs. All rights reserved.
- //
- #import "GameController.h"
- #import "Scene.h"
- #import "GameScene.h"
- //#import "ResourceManager.h"
- @implementation GameController
- -(void)dealloc{
- free(data);
- [context_ release];
- [super dealloc];
- }
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- self.preferredFramesPerSecond = 30;
- data = nil;
- }
- return self;
- }
- -(void)loadView{
- [super loadView];
- context_ = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
- // GameScene *scene = [[GameScene alloc] initWithFrame:[[UIScreen mainScreen]bounds] context:context_];
- // [self setView:scene];
- // [scene release];
- [(GLKView *)self.view setContext:context_];
- [(GLKView *)self.view setDelegate:self];
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
- return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
- }
- -(void)loadData{
- data = (UserData *)malloc(sizeof(UserData));
- glClearColor(131.0f/255.0f, 151.0f/255.0f, 188.0f/255.0f, 1.0f);
- CGSize winSz = self.view.bounds.size;
- glViewport(0, 0, (GLsizei)winSz.width, (GLsizei)winSz.height);
- //build shader
- GLuint vShader = [self buildShaderType:GL_VERTEX_SHADER path:[[NSBundle mainBundle] pathForResource:@"texture" ofType:@"vsh"]];
- GLuint fShader = [self buildShaderType:GL_FRAGMENT_SHADER path:[[NSBundle mainBundle]pathForResource:@"texture" ofType:@"fsh"]];
- [self compileProgramForVertexShader:vShader fragShader:fShader];
- data->positionLoc = glGetAttribLocation ( data->programObject, "a_position" );
- data->texCoordLoc = glGetAttribLocation ( data->programObject, "a_texCoord" );
- // Get the sampler location
- data->samplerLoc = glGetUniformLocation ( data->programObject, "s_texture" );
- data->textureId = 0;
- }
- -(void)update{
- //[(GameScene *)self.view update:self.timeSinceLastUpdate];
- if(!data)
- [self loadData];
- [(GLKView *)self.view setNeedsDisplay];
- }
- -(void)glkView:(GLKView *)view drawInRect:(CGRect)rect{
- if(!data)
- [self loadData];
- GLfloat vVertices[] = { -0.5f, 0.5f, 0.0f, // Position 0
- 0.0f, 0.0f, // TexCoord 0
- -0.5f, -0.5f, 0.0f, // Position 1
- 0.0f, 1.0f, // TexCoord 1
- 0.5f, -0.5f, 0.0f, // Position 2
- 1.0f, 1.0f, // TexCoord 2
- 0.5f, 0.5f, 0.0f, // Position 3
- 1.0f, 0.0f // TexCoord 3
- };
- GLushort indices[] = { 0, 1, 2, 0, 2, 3 };
- // Load the vertex position
- glVertexAttribPointer ( data->positionLoc, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), vVertices );
- // Load the texture coordinate
- glVertexAttribPointer ( data->texCoordLoc, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), &vVertices[3] );
- glEnableVertexAttribArray ( data->positionLoc );
- glEnableVertexAttribArray ( data->texCoordLoc );
- // Bind the texture
- if(data->textureId == 0){
- data->textureId = [[GLKTextureLoader textureWithCGImage:[[UIImage imageNamed:@"Tree Short.png"]CGImage] options:nil error:nil] name];
- }
- glActiveTexture ( GL_TEXTURE0 );
- glBindTexture ( GL_TEXTURE_2D, data->textureId );
- // Set the sampler texture unit to 0
- glUniform1i ( data->samplerLoc, 0 );
- glDrawElements ( GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices );
- }
- #pragma mark - Build Shader -
- -(void)compileProgramForVertexShader:(GLuint)vShader fragShader:(GLuint)fShader{
- NSLog(@"compiling shaders");
- data->programObject = glCreateProgram();
- glAttachShader(data->programObject, vShader);
- glAttachShader(data->programObject, fShader);
- glLinkProgram(data->programObject);
- GLint logLength;
- glGetProgramiv(data->programObject, GL_INFO_LOG_LENGTH, &logLength);
- if (logLength > 0)
- {
- GLchar *log = (GLchar *)malloc(logLength);
- glGetProgramInfoLog(data->programObject, logLength, &logLength, log);
- NSLog(@"Program link log:\n%s", log);
- free(log);
- }
- GLint status;
- glGetProgramiv(data->programObject, GL_LINK_STATUS, &status);
- if (status == GL_FALSE)
- NSLog(@"Failed to link program %d", data->programObject);
- glUseProgram(data->programObject);
- }
- -(GLuint)buildShaderType:(GLenum)shaderType path:(NSString *)path{
- NSError *error = nil;
- NSString *shaderStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
- if(error)
- NSLog(@"shader string invalid: %@",[error debugDescription]);
- const GLchar *shaderStrPtr = (GLchar *)[shaderStr UTF8String];
- GLint len = (GLint)[shaderStr length];
- GLuint shader = glCreateShader(shaderType);
- glShaderSource(shader, 1, &shaderStrPtr, &len);
- glCompileShader(shader);
- GLint logLength;
- glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
- if (logLength > 0)
- {
- GLchar *log = (GLchar *)malloc(logLength);
- glGetShaderInfoLog(shader, logLength, &logLength, log);
- NSLog(@"Shader compile log:\n%s", log);
- free(log);
- }
- GLint status;
- glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
- if (status == GL_FALSE){
- NSLog(@"Failed to compile shader:\n");
- }
- return shader;
- }
- @end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement