X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmain.cpp;h=f9bc154739fa57a0045f8e6bbd991782367cc9d7;hb=b4995967309bf5570161db2287e27b84ca94ab9a;hp=33071f1ef3510f6d088feea27273245097d78493;hpb=918b4955c28fad1836a57ab3e9e033448144996c;p=blank.git diff --git a/src/main.cpp b/src/main.cpp index 33071f1..f9bc154 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,155 +1,84 @@ -#include -#include -#include -#include -#include +#include "app.hpp" -#include "init.hpp" -#include "shader.hpp" +#include +#include +#include -using namespace std; using namespace blank; -constexpr GLfloat vtx_coords[] = { - -1.0f, -1.0f, -1.0f, - 1.0f, -1.0f, -1.0f, - 0.0f, 1.0f, -1.0f, -}; - - -int main(int argc, char *argv[]) { - - InitSDL init_sdl; - InitGL init_gl; - Window window; - - GLContext ctx = window.CreateContext(); - InitGLEW init_glew; - GLContext::EnableVSync(); +namespace { +enum Mode { + NORMAL, + FRAME_LIMIT, + TIME_LIMIT, + FIXED_FRAME_LIMIT, +}; - Shader vtx_shader(GL_VERTEX_SHADER); - vtx_shader.Source( - "#version 330 core\n" - "layout(location = 0) in vec3 vertexPosition_modelspace;\n" - "uniform mat4 MVP;\n" - "void main() {\n" - "vec4 v = vec4(vertexPosition_modelspace, 1);\n" - "gl_Position = MVP * v;\n" - "}\n" - ); - vtx_shader.Compile(); +} - if (!vtx_shader.Compiled()) { - cerr << "vertex shader compile error" << endl; - vtx_shader.Log(cerr); - return 4; - } - Shader frag_shader(GL_FRAGMENT_SHADER); - frag_shader.Source( - "#version 330 core\n" - "out vec3 color;\n" - "void main() {\n" - "color = vec3(1, 1, 1);\n" - "}\n" - ); - frag_shader.Compile(); +int main(int argc, char *argv[]) { - if (!frag_shader.Compiled()) { - cerr << "fragment shader compile error" << endl; - frag_shader.Log(cerr); - return 4; + Mode mode = NORMAL; + size_t n = 0, t = 0; + + bool error = false; + for (int i = 1; i < argc; ++i) { + if (argv[i] == nullptr || argv[i][0] == '\0') continue; + if (argv[i][0] == '-') { + if (argv[i][1] == 't' && argv[i][2] == '\0') { + ++i; + if (i >= argc) { + std::cerr << "missing argument to -t" << std::endl; + error = true; + } else { + t = std::strtoul(argv[i], nullptr, 10); + } + } else { + std::cerr << "unable to interpret argument " + << i << " (" << argv[i] << ")" << std::endl; + error = true; + } + } else if (std::isdigit(*argv[i])) { + n = std::strtoul(argv[i], nullptr, 10); + } else { + std::cerr << "unable to interpret argument " + << i << " (" << argv[i] << ")" << std::endl; + error = true; + } } - - Program program; - program.Attach(vtx_shader); - program.Attach(frag_shader); - program.Link(); - - if (!program.Linked()) { - cerr << "program link error" << endl; - program.Log(cerr); - return 4; + if (error) { + return 1; } - - GLuint VertexArrayID; - glGenVertexArrays(1, &VertexArrayID); - glBindVertexArray(VertexArrayID); - - - GLuint vtx_buf; - glGenBuffers(1, &vtx_buf); - glBindBuffer(GL_ARRAY_BUFFER, vtx_buf); - glBufferData(GL_ARRAY_BUFFER, sizeof(vtx_coords), vtx_coords, GL_STATIC_DRAW); - - - glm::mat4 projection = glm::perspective( - 45.0f, // FOV in degrees - 1.0f, // aspect ratio - 0.1f, // near clip - 100.0f // far clip - ); - glm::mat4 view = glm::lookAt( - glm::vec3(0, 0, 0), // observer - glm::vec3(0, 0, -1), // target - glm::vec3(0, 1, 0) // up - ); - glm::mat4 model(1.0f); // identity: no transformation - glm::mat4 mvp = projection * view * model; - - GLuint mvp_id = program.UniformLocation("MVP"); - - - glClearColor(0.0, 0.0, 0.0, 1.0); - - - bool running = true; - Uint32 last = SDL_GetTicks(); - while (running) { - Uint32 now = SDL_GetTicks(); - int delta = now - last; - - SDL_Event event; - while (SDL_PollEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - running = false; - break; - default: - break; - } + if (n > 0) { + if (t > 0) { + mode = FIXED_FRAME_LIMIT; + } else { + mode = FRAME_LIMIT; } + } else if (t > 0) { + mode = TIME_LIMIT; + } - glClear(GL_COLOR_BUFFER_BIT); - - program.Use(); - - glUniformMatrix4fv(mvp_id, 1, GL_FALSE, &mvp[0][0]); - - glEnableVertexAttribArray(0); - glBindBuffer(GL_ARRAY_BUFFER, vtx_buf); - glVertexAttribPointer( - 0, // attribute 0 (for shader) - 3, // size - GL_FLOAT, // type - GL_FALSE, // normalized - 0, // stride - nullptr // offset - ); - glDrawArrays( - GL_TRIANGLES, // how - 0, // start - 3 // len - ); - glDisableVertexAttribArray(0); - - window.Flip(); - - last = now; + Application app; + switch (mode) { + default: + case NORMAL: + app.Run(); + break; + case FRAME_LIMIT: + app.RunN(n); + break; + case TIME_LIMIT: + app.RunT(t); + break; + case FIXED_FRAME_LIMIT: + app.RunS(n, t); + break; } return 0;