summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/Makefile.am1
-rwxr-xr-xscripts/pso2h.py126
2 files changed, 127 insertions, 0 deletions
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
new file mode 100644
index 0000000..0648085
--- /dev/null
+++ b/scripts/Makefile.am
@@ -0,0 +1 @@
+EXTRA_DIST = pso2h.py
diff --git a/scripts/pso2h.py b/scripts/pso2h.py
new file mode 100755
index 0000000..0ce063f
--- /dev/null
+++ b/scripts/pso2h.py
@@ -0,0 +1,126 @@
+#!/usr/bin/python
+"""pso2h
+
+A small python script to generated header files from compiled ARBfp1.0 shaders
+
+Usage: ./pso2h-runtime [options] file.pso
+
+Options:
+ -o, --output header file name
+ -n, --name name of the shader
+ -h, --help display this help
+ -v, --verbose verbose output
+
+ file.pso compiled shader"""
+
+import sys, os, string, getopt
+
+__author__ = "Damien Lespiau <damien.lespiau@intel.com>"
+__version__ = "0.1"
+__date__ = "20090426"
+__copyright__ = "Copyright (c) 2009 Intel Corporation"
+__license__ = "GPL v2"
+
+_verbose = 0
+
+_template = """/*
+ * This file was generated by pso2h.
+ */
+
+#ifndef %s
+#define %s
+
+/*
+ * This define is the size of the shader in bytes. More precisely it's the
+ * sum of strlen() of every string in the array.
+ */
+#define %s %d
+
+static const char *%s[] =
+{
+%s};
+
+#endif
+"""
+
+def define(format, filename):
+ path, file = os.path.split(filename)
+ return format % string.upper(file.replace('.', '_').capitalize())
+
+class PSO:
+ def __init__(self, filename=None, name=None):
+ self.filename = filename
+ self.name = name
+
+ def write_header(self, filename):
+ file = open(self.filename)
+ header = open(filename, "w")
+ __HEADER__ = define("__%s__", filename)
+ SIZE = define("%s_SZ", self.name)
+ body = ""
+ size = 0;
+
+ for line in file:
+ # skip comments
+ if line.startswith('#'):
+ continue
+ line = string.strip(line)
+ line += '\\n'
+ size += len(line) - 1;
+ body += " \"%s\",\n" % line
+
+ header.write(_template % (__HEADER__,
+ __HEADER__,
+ SIZE,
+ size,
+ self.name,
+ body))
+
+def usage():
+ print __doc__
+
+def main(argv):
+ opt_shader = None
+ opt_header = None
+ opt_name = None
+ try:
+ opts, args = getopt.getopt(argv, "hvo:n:", \
+ ["help", "verbose", "--ouput=", "--name="])
+ except getopt.GetoptError:
+ usage()
+ sys.exit(1)
+ for opt, arg in opts:
+ if opt in ("-h", "--help"):
+ usage()
+ sys.exit()
+ elif opt in ("-v", "--verbose"):
+ global _verbose
+ _verbose = 1
+ elif opt in ("-o", "-output"):
+ opt_header = arg
+ elif opt in ("-n", "-name"):
+ opt_name = arg
+ if args:
+ opt_shader = "".join(args)
+
+ #input validation
+ if not opt_shader:
+ print "error: you must supply a shader file.\n"
+ usage()
+ sys.exit(1)
+ if not os.access(opt_shader, os.F_OK):
+ print opt_shader + ": file not found"
+ sys.exit(1)
+ file, ext = os.path.splitext(opt_shader)
+ if not opt_header:
+ opt_header = file + ".h"
+ if not opt_name:
+ path, file = os.path.split(file)
+ opt_name = file
+
+ pso = PSO(opt_shader, opt_name)
+ pso.write_header(opt_header)
+
+if __name__ == "__main__":
+ main(sys.argv[1:])
+