Skip to content

Instantly share code, notes, and snippets.

@voidtuxic
Created March 6, 2014 14:08
Show Gist options
  • Save voidtuxic/9390462 to your computer and use it in GitHub Desktop.
Save voidtuxic/9390462 to your computer and use it in GitHub Desktop.
GLKit starter ViewController
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
{
EAGLContext* context;
GLuint vertexArray; // our VAO
GLuint vertexBuffer; // our VBO for vertices
GLuint indexBuffer; // our VBO for indices
GLKBaseEffect* effect;
}
- (void)viewDidLoad
{
[super viewDidLoad];
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; // context creation
// View setup
GLKView* view = (GLKView*)self.view;
view.context = context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[EAGLContext setCurrentContext:context];
GLKVector3 vertices[4];
vertices[0] = GLKVector3Make(-0.5f, -0.5f, 0); // create a new GLKVector3 structure
vertices[1] = GLKVector3Make(0.5f, -0.5f, 0);
vertices[2] = GLKVector3Make(0.5f, 0.5f, 0);
vertices[3] = GLKVector3Make(-0.5f, 0.5f, 0);
GLuint indices[6];
indices[0] = 0;
indices[1] = 1;
indices[2] = 2;
indices[3] = 0;
indices[4] = 2;
indices[5] = 3;
glGenVertexArraysOES(1, &vertexArray); // create the VAO
glBindVertexArrayOES(vertexArray); // tell opengl we're using it
// create the vertices VBO
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); // tell opengl we're using it
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // upload the date to the GPU
// same story for the indices VBO
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
// tell opengl to activate position on shaders...
glEnableVertexAttribArray(GLKVertexAttribPosition);
// and use this part of our vertex data as input
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLKVector3), 0);
// close our VAO because we're done here
glBindVertexArrayOES(0);
effect = [[GLKBaseEffect alloc] init];
// set up constant color
effect.useConstantColor = GL_TRUE;
effect.constantColor = GLKVector4Make(0, 1, 0, 1);
// set up "camera"
effect.transform.projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(60), fabsf(view.bounds.size.height / view.bounds.size.width), 0.1f, 100.f);
effect.transform.modelviewMatrix = GLKMatrix4MakeTranslation(0, 0, -5);
}
-(void)viewDidUnload
{
[super viewDidUnload];
// delete our buffers GPU side
glDeleteBuffers(1, &vertexBuffer);
glDeleteBuffers(1, &indexBuffer);
glDeleteVertexArraysOES(1, &vertexArray);
// delete our context
[EAGLContext setCurrentContext:context];
if ([EAGLContext currentContext] == context)
[EAGLContext setCurrentContext:nil];
context = nil;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect{
glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindVertexArrayOES(vertexArray); // use our VAO
[effect prepareToDraw]; // do secret mysterious apple stuff
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); // draw
glBindVertexArrayOES(0); // don't use our VAO
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment