#include #include #include #define SKR_BACKEND_API 0 // opengl #define SKR_BACKEND_WINDOW 0 // glfw #include SkrCamera* g_skr_camera = SkrDefaultFPSCamera; int main(void) { SkrState state = SkrInit(&(SkrWindow){ .Title = "Hello SKR", .Width = 800, .Height = 600, }); glewInit(); vec3 cubePositions[] = {{0.0f, 0.0f, 0.0f}, {2.0f, 5.0f, -15.0f}, {-1.5f, -2.2f, -2.5f}, {-3.8f, -2.0f, -12.3f}, {2.4f, -0.4f, -3.5f}, {-1.7f, 3.0f, -7.5f}, {1.3f, -2.0f, -2.5f}, {1.5f, 2.0f, -2.5f}, {1.5f, 0.2f, -1.5f}, {-1.3f, 1.0f, -1.5f}}; glEnable(GL_DEPTH_TEST); #include
#include
SkrShader shaders[2] = { {.Type = GL_VERTEX_SHADER, .Source = camera_vert}, {.Type = GL_FRAGMENT_SHADER, .Source = camera_frag}, }; GLuint program = m_skr_gl_create_program_from_shaders(shaders, sizeof(shaders)); SkrShaderProgram programs[1] = {{ .ID = program, .Name = "camera", .Shaders = shaders, .ShaderCount = sizeof(shaders) / sizeof(SkrShader), }}; state.Programs = programs; state.ProgramCount = sizeof(programs) / sizeof(SkrShaderProgram); SkrTexture textures[2] = { {.Path = "assets/container.jpg"}, {.Path = "assets/awesomeface.png"}, }; SkrVertex vertices[36] = {{{-0.5f, -0.5f, -0.5f}, {0.0f, 0.0f}}, {{0.5f, -0.5f, -0.5f}, {1.0f, 0.0f}}, {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, {{-0.5f, 0.5f, -0.5f}, {0.0f, 1.0f}}, {{-0.5f, -0.5f, -0.5f}, {0.0f, 0.0f}}, {{-0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, {{0.5f, -0.5f, 0.5f}, {1.0f, 0.0f}}, {{0.5f, 0.5f, 0.5f}, {1.0f, 1.0f}}, {{0.5f, 0.5f, 0.5f}, {1.0f, 1.0f}}, {{-0.5f, 0.5f, 0.5f}, {0.0f, 1.0f}}, {{-0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, {{-0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, {{-0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, {{-0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, {{-0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, {{-0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, {{-0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, {{0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, {{0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, {{0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, {{0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, {{0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, {{-0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, {{0.5f, -0.5f, -0.5f}, {1.0f, 1.0f}}, {{0.5f, -0.5f, 0.5f}, {1.0f, 0.0f}}, {{0.5f, -0.5f, 0.5f}, {1.0f, 0.0f}}, {{-0.5f, -0.5f, 0.5f}, {0.0f, 0.0f}}, {{-0.5f, -0.5f, -0.5f}, {0.0f, 1.0f}}, {{-0.5f, 0.5f, -0.5f}, {0.0f, 1.0f}}, {{0.5f, 0.5f, -0.5f}, {1.0f, 1.0f}}, {{0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, {{0.5f, 0.5f, 0.5f}, {1.0f, 0.0f}}, {{-0.5f, 0.5f, 0.5f}, {0.0f, 0.0f}}, {{-0.5f, 0.5f, -0.5f}, {0.0f, 1.0f}}}; SkrMesh mesh; mesh.Vertices = vertices; mesh.VertexCount = sizeof(vertices) / sizeof(SkrVertex); mesh.Textures = textures; mesh.TextureCount = sizeof(textures) / sizeof(SkrTexture); mesh.Backend.GL.Program = program; m_skr_gl_mesh_init(&mesh); m_skr_gl_shader_use(program); m_skr_gl_shader_set_int(program, "texture1", 0); m_skr_gl_shader_set_int(program, "texture2", 1); while (!SkrWindowShouldClose(state.Window)) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_skr_gl_mesh_bind_textures(&mesh); m_skr_gl_shader_use(program); if (g_skr_camera) { mat4 projection; glm_perspective(glm_rad(g_skr_camera->FOV), (float)state.Window->Width / (float)state.Window->Height, 0.1f, 100.0f, projection); m_skr_gl_shader_set_mat4(program, "projection", projection); mat4 view; vec3 center; glm_vec3_add(g_skr_camera->Position, g_skr_camera->Front, center); glm_lookat(g_skr_camera->Position, center, g_skr_camera->Up, view); m_skr_gl_shader_set_mat4(program, "view", view); } glBindVertexArray(mesh.VAO); for (unsigned int i = 0; i < 10; i++) { mat4 model; glm_mat4_identity(model); // initialize to identity // translate to position glm_translate(model, cubePositions[i]); // rotate by 20*i degrees glm_rotate(model, glm_rad(20.0f * (float)i), (vec3){1.0f, 0.3f, 0.5f}); m_skr_gl_shader_set_mat4(program, "model", model); glDrawArrays(GL_TRIANGLES, 0, 36); } glfwSwapBuffers(state.Window->Backend.Handler.GLFW); glfwPollEvents(); } SkrFinalize(&state); return 0; }