From 0a245e329a9af7df792981f1f35a70bbfaded8b9 Mon Sep 17 00:00:00 2001 From: jvech Date: Sun, 1 Jan 2023 20:18:25 -0500 Subject: feat: cli support and install rule added Now it is possible to use custom shaders and install the program on the system --- src/main.c | 55 ++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index c9ffad2..f58fa28 100644 --- a/src/main.c +++ b/src/main.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -50,6 +51,7 @@ static void meshSetUp(Mesh *mesh); static void meshDraw(unsigned int shader, Mesh mesh); static void objSetUp(Obj obj); static void objDraw(unsigned int shader, Obj obj); +static void usage(int status); static float cameraSpeed = 2.0; @@ -258,6 +260,12 @@ objDraw(unsigned int shader, Obj obj) } } +void +usage(int exitStatus) +{ + fprintf(stderr, "Usage: mverse [-h] [-v vertexshader] [-f fragmentshader] objfile\n"); + exit(exitStatus); +} int main(int argc, char *argv[]) { @@ -265,9 +273,35 @@ int main(int argc, char *argv[]) GLFWwindow *window; const char *glfwErrno; - if (argc == 2) obj = objCreate(argv[1]); - else if (argc == 1) obj = objCreate("-"); - else return 1; + int opt; + char *vertexFile, *fragmentFile; + vertexFile = getenv("MVERSE_VERTEX"); + fragmentFile = getenv("MVERSE_FRAGMENT"); + + while ((opt = getopt(argc, argv, "hv:f:")) != -1) { + switch (opt) { + case 'h': + usage(0); + break; + case 'v': + vertexFile = optarg; + break; + case 'f': + fragmentFile = optarg; + break; + default: + usage(2); + } + } + + if (optind >= argc) userError("cli Error", "expected argument after options\n"); + else if (!vertexFile) userError("environment Error", "MVERSE_VERTEX not defined"); + else if (!fragmentFile) userError("environment Error", "MVERSE_FRAGMENT not defined"); + + argv += optind; + argc -= optind; + + obj = objCreate(argv[0]); if (obj.mesh == NULL) { glfwTerminate(); @@ -296,15 +330,16 @@ int main(int argc, char *argv[]) userError("glewInit Error", (const char *)glewGetErrorString(glewErrno)); } - unsigned int shader = shaderCreateProgram("shaders/dummy.vsh", "shaders/dummy.fsh"); + unsigned int shader = shaderCreateProgram(vertexFile, fragmentFile); objSetUp(obj); - struct Camera mainCamera; - mainCamera.position = linearVec3(0.0, 0.0, 10.0); - mainCamera.front = linearVec3(0.0, 0.0, 1.0); - mainCamera.up = linearVec3(0.0, 1.0, 0.0); + struct Camera mainCamera = { + .position = linearVec3(0.0, 0.0, 10.0), + .front = linearVec3(0.0, 0.0, 1.0), + .up = linearVec3(0.0, 1.0, 0.0), + }; Mat4 model, view, proj; Mat4 T, S, R; @@ -316,7 +351,7 @@ int main(int argc, char *argv[]) glEnable(GL_DEPTH_TEST); while (!glfwWindowShouldClose(window)) { processInput(window); - glClearColor(1.0f, 1.0f, 1.0f, 1.0f); + glClearColor(0.2f, 0.2f, 0.2f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glfwGetWindowSize(window, &width, &height); sprintf(title, "mverse: x: %f y: %f z: %f", @@ -325,8 +360,6 @@ int main(int argc, char *argv[]) mainCamera.front.vector[2] + mainCamera.position.vector[2]); glfwSetWindowTitle(window, title); - - t = (float)glfwGetTime(); dt = t - t0; t0 = t; -- cgit v1.2.3-70-g09d2