filename | src/tools/genglsl.c |
changeset | 968:6fb1481859a4 |
prev | 736:a02d1475ccfd |
next | 1130:5f56fc931112 |
author | nkeynes |
date | Thu Jun 10 22:13:16 2010 +1000 (13 years ago) |
permissions | -rw-r--r-- |
last change | Integrate executable wrapping into the user interface - command-line now loads wrapped by default, -e <bin> to run binary - add support for .bin executables - Add useful (internal) error codes |
file | annotate | diff | log | raw |
nkeynes@405 | 1 | /** |
nkeynes@561 | 2 | * $Id$ |
nkeynes@405 | 3 | * |
nkeynes@405 | 4 | * Trivial tool to take two shader source files and dump them out in |
nkeynes@405 | 5 | * a C file with appropriate escaping. |
nkeynes@405 | 6 | * |
nkeynes@405 | 7 | * Copyright (c) 2007 Nathan Keynes. |
nkeynes@405 | 8 | * |
nkeynes@405 | 9 | * This program is free software; you can redistribute it and/or modify |
nkeynes@405 | 10 | * it under the terms of the GNU General Public License as published by |
nkeynes@405 | 11 | * the Free Software Foundation; either version 2 of the License, or |
nkeynes@405 | 12 | * (at your option) any later version. |
nkeynes@405 | 13 | * |
nkeynes@405 | 14 | * This program is distributed in the hope that it will be useful, |
nkeynes@405 | 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
nkeynes@405 | 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
nkeynes@405 | 17 | * GNU General Public License for more details. |
nkeynes@405 | 18 | */ |
nkeynes@405 | 19 | |
nkeynes@405 | 20 | #include <stdio.h> |
nkeynes@405 | 21 | #include <stdlib.h> |
nkeynes@405 | 22 | |
nkeynes@405 | 23 | /** |
nkeynes@405 | 24 | * Copy input to output, quoting " characters as we go. |
nkeynes@405 | 25 | */ |
nkeynes@968 | 26 | static void writeShader( FILE *out, FILE *in ) |
nkeynes@405 | 27 | { |
nkeynes@405 | 28 | int ch; |
nkeynes@405 | 29 | |
nkeynes@405 | 30 | while( (ch = fgetc(in)) != EOF ) { |
nkeynes@736 | 31 | if( ch == '\"' ) { |
nkeynes@736 | 32 | fputc( '\\', out ); |
nkeynes@736 | 33 | } else if( ch == '\n') { |
nkeynes@736 | 34 | fputs( "\\n\\", out ); |
nkeynes@736 | 35 | } |
nkeynes@736 | 36 | fputc( ch, out ); |
nkeynes@405 | 37 | } |
nkeynes@405 | 38 | } |
nkeynes@405 | 39 | |
nkeynes@405 | 40 | int main( int argc, char *argv[] ) |
nkeynes@405 | 41 | { |
nkeynes@405 | 42 | if( argc != 4 ) { |
nkeynes@736 | 43 | fprintf( stderr, "Usage: genglsl <vertex-shader-file> <fragment-shader-file> <output-file>\n"); |
nkeynes@736 | 44 | exit(1); |
nkeynes@405 | 45 | } |
nkeynes@405 | 46 | |
nkeynes@405 | 47 | FILE *vsin = fopen( argv[1], "ro" ); |
nkeynes@405 | 48 | if( vsin == NULL ) { |
nkeynes@736 | 49 | perror( "Unable to open vertex shader source" ); |
nkeynes@736 | 50 | exit(2); |
nkeynes@405 | 51 | } |
nkeynes@405 | 52 | |
nkeynes@405 | 53 | FILE *fsin = fopen( argv[2], "ro" ); |
nkeynes@405 | 54 | if( fsin == NULL ) { |
nkeynes@736 | 55 | perror( "Unable to open fragment shader source" ); |
nkeynes@736 | 56 | exit(2); |
nkeynes@405 | 57 | } |
nkeynes@405 | 58 | |
nkeynes@405 | 59 | FILE *out = fopen( argv[3], "wo" ); |
nkeynes@405 | 60 | if( out == NULL ) { |
nkeynes@736 | 61 | perror( "Unable to open output file" ); |
nkeynes@736 | 62 | exit(2); |
nkeynes@405 | 63 | } |
nkeynes@405 | 64 | |
nkeynes@405 | 65 | fprintf( out, "/**\n * This file is automatically generated - do not edit\n */\n\n" ); |
nkeynes@405 | 66 | fprintf( out, "const char *glsl_vertex_shader_src = \"" ); |
nkeynes@405 | 67 | |
nkeynes@405 | 68 | writeShader( out, vsin ); |
nkeynes@405 | 69 | |
nkeynes@405 | 70 | fprintf( out, "\";\n\n" ); |
nkeynes@405 | 71 | fprintf( out, "const char *glsl_fragment_shader_src = \"" ); |
nkeynes@405 | 72 | writeShader( out, fsin ); |
nkeynes@405 | 73 | fprintf( out, "\";\n\n" ); |
nkeynes@405 | 74 | fclose( fsin ); |
nkeynes@405 | 75 | fclose( vsin ); |
nkeynes@405 | 76 | fclose( out ); |
nkeynes@405 | 77 | return 0; |
nkeynes@405 | 78 | } |
.