diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-15 12:00:37 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-15 12:00:37 -0700 |
commit | 2b36895f0c5bc569e15d63d2c865bda0b6928b36 (patch) | |
tree | f0bd09ab03cd59f833b43a09d766fa78c80b92ea | |
parent | 54992c30b00b13232641b5d2b6479f005a60abfd (diff) |
Infer shader type from suffix on filename
-rw-r--r-- | main.cpp | 37 |
1 files changed, 21 insertions, 16 deletions
@@ -78,6 +78,14 @@ load_text_file(const char *file_name, size_t *size) } +void +usage_fail(const char *name) +{ + printf("%s <filename.frag|filename.vert>\n", name); + exit(EXIT_FAILURE); +} + + int main(int argc, char **argv) { @@ -86,29 +94,26 @@ main(int argc, char **argv) size_t shader_len; exec_list instructions; - if (argc < 3) { - printf("Usage: %s [v|g|f|i] <shader_file>\n", argv[0]); - return EXIT_FAILURE; - } + if (argc < 2) + usage_fail(argv[0]); memset(& state, 0, sizeof(state)); - switch (argv[1][0]) { - case 'v': + const unsigned len = strlen(argv[1]); + if (len < 6) + usage_fail(argv[0]); + + const char *const ext = & argv[1][len - 5]; + if (strncmp(".vert", ext, 5) == 0) state.target = vertex_shader; - break; - case 'g': + else if (strncmp(".geom", ext, 5) == 0) state.target = geometry_shader; - break; - case 'f': + else if (strncmp(".frag", ext, 5) == 0) state.target = fragment_shader; - break; - default: - printf("Usage: %s [v|g|f] <shader_file>\n", argv[0]); - return EXIT_FAILURE; - } + else + usage_fail(argv[0]); - shader = load_text_file(argv[2], & shader_len); + shader = load_text_file(argv[1], & shader_len); state.scanner = NULL; state.translation_unit.make_empty(); |