// // Game.h // SkyRoads // // Created by Joshua Moerman on 12/22/12. // Copyright (c) 2012 Vadovas. All rights reserved. // #ifndef SkyRoads_Game_h #define SkyRoads_Game_h #include "myGL.h" constexpr static const char* attributes[] = { "position", "normal", "color", "tex_coord0" }; template std::vector from_strarray(const char* const (& strs)[N]) { std::vector v(N); for(auto i = 0; i < N; ++i){ v.push_back(strs[i]); } return v; } inline std::string getPath(std::string name, std::string kind) { return [[[NSBundle mainBundle] pathForResource:[NSString stringWithUTF8String:name.c_str()] ofType:[NSString stringWithUTF8String:kind.c_str()]] UTF8String]; } struct Game{ std::vector triangle{ {10.0, 0.0, 3.0, 1.0, 1.0, 1.0, 1.0}, {-8.0, 5.0, -3.0, 1.0, 1.0, 1.0, 1.0}, {-8.0, -5.0, 0.0, 1.0, 0.0, 1.0, 1.0} }; J::shader basic_shader; Game() : basic_shader(getPath("basic_shader", "vsh"), getPath("basic_shader", "fsh"), from_strarray(attributes)) {} void update(float dt){ } void draw(){ GLKMatrix4 projectionMatrix = GLKMatrix4MakeOrtho(0.0, 768.0, 1024.0, 0.0f, -100, 100.0); GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(50.0f, 50.0f, 0.0f); GLKMatrix4 modelViewProjectionMatrix = GLKMatrix4Multiply(projectionMatrix, modelViewMatrix); GLKMatrix3 normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(modelViewMatrix), NULL); basic_shader.begin(); basic_shader.set_uniform("modelViewProjectionMatrix", modelViewProjectionMatrix.m, 0); basic_shader.set_uniform("normalMatrix", normalMatrix.m, 0); basic_shader.set_attribute("position", 3, GL_FLOAT, GL_FALSE, sizeof(gl::Vertex), &triangle[0][0]); basic_shader.set_attribute("color", 4, GL_FLOAT, GL_FALSE, sizeof(gl::Vertex), &triangle[0][3]); glDrawArrays(GL_TRIANGLE_STRIP, 0, triangle.size()); basic_shader.end(); } }; #endif