# HG changeset patch # User Matti Hamalainen # Date 1572267832 -7200 # Node ID 52a586c344f44f43e56e9f4ffe27038cf6120849 # Parent 89dc8caeff41292a027dc13ae60c18cf56a84cb4 Add option -m to specify mesh/shader filename prefix. diff -r 89dc8caeff41 -r 52a586c344f4 glxdragon.cpp --- a/glxdragon.cpp Mon Oct 28 13:08:26 2019 +0200 +++ b/glxdragon.cpp Mon Oct 28 15:03:52 2019 +0200 @@ -54,16 +54,16 @@ std::vector vertices; std::vector faces; - GLuint id_prog, id_ps, id_vs; + GLuint id_prog, id_fs, id_vs; }; - /* Options */ bool optUseShaders = false; int optWidth = SET_DEF_WIDTH, optHeight = SET_DEF_HEIGHT; +std::string optModelPrefix = "dragon"; /* Globals @@ -295,7 +295,7 @@ void dmLinkMeshShaders(Mesh &mesh) { mesh.id_prog = glCreateProgram(); - glAttachShader(mesh.id_prog, mesh.id_ps); + glAttachShader(mesh.id_prog, mesh.id_fs); glAttachShader(mesh.id_prog, mesh.id_vs); glLinkProgram(mesh.id_prog); } @@ -303,8 +303,8 @@ int main(int argc, char *argv[]) { - struct Mesh dragonMesh; - std::string dragonVS, dragonFS; + std::string modelVertStr, modelFragStr; + struct Mesh modelMesh; bool exitFlag = false, optShowHelp = false; int startTime, nframes = 0; @@ -317,7 +317,7 @@ char *opt = arg + 1; if ((opt[0] == '-' && opt[1] == 'h' && opt[2] == 'e') || - opt[0] == '?') + opt[0] == '?' || (opt[0] == '-' && opt[1] == '?')) { optShowHelp = true; break; @@ -334,6 +334,17 @@ else if (opt[0] == 'h') optHeight = atoi(opt + 1); + else + if (opt[0] == 'm') + { + if (opt[1] == 0) + { + printf("Option -m requires an argument.\n"); + goto exit; + } + + optModelPrefix = std::string(opt + 1); + } } } @@ -341,10 +352,12 @@ { printf( "Usage: %s [options]\n" - "-? Show this help\n" - "-g Use GLSL shader instead of basic OpenGL lighting\n" - "-w Window width (default %d)\n" - "-h Window height (default %d)\n" + "-? Show this help\n" + "-g Use GLSL shader instead of basic OpenGL lighting\n" + "-w Window width (default %d)\n" + "-h Window height (default %d)\n" + "-m Set model filenames prefix. Using \"-mfoo\" will\n" + " specify \"foo.mesh\", \"foo.frag\", \"foo.vert\".\n" "\n", argv[0], SET_DEF_WIDTH, SET_DEF_HEIGHT @@ -353,14 +366,20 @@ goto exit; } - if (!dmLoadMesh("dragon.mesh", dragonMesh, 100139, 200198)) + if (optModelPrefix.empty()) + { + printf("Model file prefix empty.\n"); + goto exit; + } + + if (!dmLoadMesh(optModelPrefix + ".mesh", modelMesh, 100139, 200198)) goto exit; if (optUseShaders) { // Read shader files - if (!dmReadText("dragon.frag", dragonFS) || - !dmReadText("dragon.vert", dragonVS)) + if (!dmReadText(optModelPrefix + ".frag", modelFragStr) || + !dmReadText(optModelPrefix + ".vert", modelVertStr)) goto exit; } @@ -371,9 +390,9 @@ // According to our mode .. if (optUseShaders) { - dragonMesh.id_ps = dmCompileShader(GL_FRAGMENT_SHADER, dragonFS); - dragonMesh.id_vs = dmCompileShader(GL_VERTEX_SHADER, dragonVS); - dmLinkMeshShaders(dragonMesh); + modelMesh.id_fs = dmCompileShader(GL_FRAGMENT_SHADER, modelFragStr); + modelMesh.id_vs = dmCompileShader(GL_VERTEX_SHADER, modelVertStr); + dmLinkMeshShaders(modelMesh); } else { @@ -431,7 +450,7 @@ } // Render the next frame - dmPaintGL(dragonMesh); + dmPaintGL(modelMesh); // Draw the current frame SDL_GL_SwapWindow(dmWindow); @@ -454,7 +473,6 @@ // Print the current frames per second printf("%.1lf ms for %d frames = %.1lf FPS\n", time, SET_FRAMES, (SET_FRAMES * 1000.0f) / time); - } }