Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save zainab-ali/a617da585691d9ed2ac8 to your computer and use it in GitHub Desktop.
Save zainab-ali/a617da585691d9ed2ac8 to your computer and use it in GitHub Desktop.
import UIKit
import GLKit
import OpenGLES
let GLENUM_GL_RENDERBUFFER = GLenum(GL_RENDERBUFFER)
let INT_GL_RENDERBUFFER = Int(GL_RENDERBUFFER)
let GLUINT_GL_FRAMEBUFFER = GLuint(GL_FRAMEBUFFER)
let GLENUM_GL_FRAMEBUFFER = GLenum(GL_FRAMEBUFFER)
let GLENUM_GL_COLOR_ATTACHMENT0 = GLenum(GL_COLOR_ATTACHMENT0)
let GLENUM_GL_VERTEX_SHADER = GLenum(GL_VERTEX_SHADER)
let GLENUM_GL_COMPILE_STATUS = GLenum(GL_COMPILE_STATUS)
let GLENUM_GL_FRAGMENT_SHADER = GLenum(GL_FRAGMENT_SHADER)
let GLENUM_GL_LINK_STATUS = GLenum(GL_LINK_STATUS)
let GLENUM_GL_ARRAY_BUFFER = GLenum(GL_ARRAY_BUFFER)
let GLENUM_GL_STATIC_DRAW = GLenum(GL_STATIC_DRAW)
let GLENUM_GL_FLOAT = GLenum(GL_FLOAT)
let GLENUM_GL_ELEMENT_ARRAY_BUFFER = GLenum(GL_ELEMENT_ARRAY_BUFFER)
let GLBOOLEAN_GL_FALSE = GLboolean(GL_FALSE)
let GLENUM_GL_TRIANGLES = GLenum(GL_TRIANGLES)
let GLENUM_GL_UNSIGNED_BYTE = GLenum(GL_UNSIGNED_BYTE)
let GLENUM_GL_DEPTH_TEST = GLenum(GL_DEPTH_TEST)
let GLKVertexAttribPosition: GLuint = GLuint(0)
let GLKVertexAttribNormal: GLuint = GLuint(1)
class GameViewController: UIViewController, GLKViewDelegate {
var context: EAGLContext!
var _rotation: CGFloat = 0.0
var _renderBuffer: GLuint = 0
var _vertexArray: GLuint = 0
var _vertexBuffer: GLuint = 0
var _program: GLuint = 0
var _modelViewProjectionMatrix: GLint = 0
var _normalMatrix: GLint = 0
var glCubeVertexData: [GLfloat] = [GLfloat]()
@IBOutlet var openGlView: GLKView?
override func viewDidLoad() {
super.viewDidLoad()
NSLog("View did load")
setupContext()
setupGL()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func setupContext() {
openGlView!.enableSetNeedsDisplay = false;
var api: EAGLRenderingAPI = EAGLRenderingAPI.OpenGLES3
self.context = EAGLContext(API: api)
EAGLContext.setCurrentContext(self.context)
openGlView!.context = self.context
openGlView!.drawableDepthFormat = GLKViewDrawableDepthFormat.Format24
}
func setupGL() {
self.setupVertexData()
self.loadShaders()
glEnable(GLENUM_GL_DEPTH_TEST);
glGenRenderbuffers(1, &_renderBuffer);
glGenVertexArraysOES(1, &_vertexArray);
glBindVertexArrayOES(_vertexArray);
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GLENUM_GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GLENUM_GL_ARRAY_BUFFER, glCubeVertexData.size(), glCubeVertexData, GLENUM_GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GLENUM_GL_FLOAT, GLBOOLEAN_GL_FALSE, 24, UnsafePointer<Int>(bitPattern: 0));
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GLENUM_GL_FLOAT, GLBOOLEAN_GL_FALSE, 24, UnsafePointer<Int>(bitPattern: 12));
glBindVertexArrayOES(0)
}
func setupVertexData() {
glCubeVertexData += [
0.5, -0.5, -0.5, 1.0, 0.0, 0.0,
0.5, 0.5, -0.5, 1.0, 0.0, 0.0,
0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
0.5, -0.5, 0.5, 1.0, 0.0, 0.0,
0.5, 0.5, -0.5, 1.0, 0.0, 0.0,
0.5, 0.5, 0.5, 1.0, 0.0, 0.0]
glCubeVertexData += [
0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
-0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
0.5, 0.5, 0.5, 0.0, 1.0, 0.0,
-0.5, 0.5, -0.5, 0.0, 1.0, 0.0,
-0.5, 0.5, 0.5, 0.0, 1.0, 0.0]
glCubeVertexData += [-0.5, 0.5, -0.5, -1.0, 0.0, 0.0]
glCubeVertexData += [-0.5, -0.5, -0.5, -1.0, 0.0, 0.0]
glCubeVertexData += [-0.5, 0.5, 0.5, -1.0, 0.0, 0.0]
glCubeVertexData += [-0.5, 0.5, 0.5, -1.0, 0.0, 0.0]
glCubeVertexData += [-0.5, -0.5, -0.5, -1.0, 0.0, 0.0]
glCubeVertexData += [-0.5, -0.5, 0.5, -1.0, 0.0, 0.0]
glCubeVertexData += [-0.5, -0.5, -0.5, 0.0, -1.0, 0.0]
glCubeVertexData += [0.5, -0.5, -0.5, 0.0, -1.0, 0.0]
glCubeVertexData += [-0.5, -0.5, 0.5, 0.0, -1.0, 0.0]
glCubeVertexData += [-0.5, -0.5, 0.5, 0.0, -1.0, 0.0]
glCubeVertexData += [0.5, -0.5, -0.5, 0.0, -1.0, 0.0]
glCubeVertexData += [0.5, -0.5, 0.5, 0.0, -1.0, 0.0]
glCubeVertexData += [
0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
-0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
0.5, -0.5, 0.5, 0.0, 0.0, 1.0,
-0.5, 0.5, 0.5, 0.0, 0.0, 1.0,
-0.5, -0.5, 0.5, 0.0, 0.0, 1.0]
glCubeVertexData += [0.5, -0.5, -0.5, 0.0, 0.0, -1.0]
glCubeVertexData += [-0.5, -0.5, -0.5, 0.0, 0.0, -1.0]
glCubeVertexData += [0.5, 0.5, -0.5, 0.0, 0.0, -1.0]
glCubeVertexData += [0.5, 0.5, -0.5, 0.0, 0.0, -1.0]
glCubeVertexData += [-0.5, -0.5, -0.5, 0.0, 0.0, -1.0]
glCubeVertexData += [-0.5, 0.5, -0.5, 0.0, 0.0, -1.0]
}
@IBAction func startDrawOperations(sender: UIButton) {
NSLog("start draw operations")
openGlView!.display()
}
func glkView(view: GLKView!, drawInRect rect: CGRect) {
NSLog("glkViewDrawInRect")
glClearColor(0.65, 0.65, 0.65, 1.0)
let combinedbits = Int16(GL_COLOR_BUFFER_BIT) | Int16(GL_DEPTH_BUFFER_BIT) // equals 11111110
glClear(GLuint(combinedbits))
glBindVertexArrayOES(_vertexArray)
glUseProgram(_program)
glUniformMatrix4fv(_modelViewProjectionMatrix, 1, 0, [2.77643108, 0.0459479354, 0.0784977376, 0.0783408954, -0.0750610456, 1.56837773, -0.0307182074, -0.0306568332, 0.220591173, -0.0446401462, -0.99845004, -0.996455132, 0.208877325, 0, 2.30668306, 2.50187445])
glUniformMatrix3fv(_normalMatrix, 1, 0, [0.996496737, 0.0292720664, -0.078340888, -0.0269403681, 0.999166905, 0.0306568407, 0.0791730061, -0.0284389053, 0.996455192])
glDrawArrays(GLENUM_GL_TRIANGLES, 0, 36)
openGlView!.bindDrawable()
}
func loadShaders() {
_program = glCreateProgram()
var vertShaderPathname: NSString = NSBundle.mainBundle().pathForResource("Shader", ofType: "vsh")!
var vertShader: GLuint = compileShader(vertShaderPathname, type: GLENUM_GL_VERTEX_SHADER)
var fragShaderPathname: NSString = NSBundle.mainBundle().pathForResource("Shader", ofType: "fsh")!
var fragShader: GLuint = compileShader(fragShaderPathname, type: GLENUM_GL_FRAGMENT_SHADER)
glAttachShader(_program, vertShader)
glAttachShader(_program, fragShader)
glBindAttribLocation(_program, GLKVertexAttribPosition, "position")
glBindAttribLocation(_program, GLKVertexAttribNormal, "normal")
glLinkProgram(_program)
_modelViewProjectionMatrix = GLint(glGetUniformLocation(_program, "modelViewProjectionMatrix"))
_normalMatrix = GLint(glGetUniformLocation(_program, "normalMatrix"))
}
func compileShader(path: NSString, type: GLenum) -> GLuint {
var shaderString = NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding, error: nil)
var shaderHandle: GLuint = glCreateShader(type)
var shaderStringUTF8 = shaderString!.UTF8String
glShaderSource(shaderHandle, 1, &shaderStringUTF8, nil)
glCompileShader(shaderHandle)
return shaderHandle
}
}
extension Array {
func size () -> Int {
return self.count * sizeofValue(self[0])
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment