OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 import optparse | 2 import optparse |
3 import os | 3 import os |
4 import re | 4 import re |
5 import subprocess | 5 import subprocess |
6 import sys | 6 import sys |
7 | 7 |
8 # This script takes an o3d cg shader from standard input and does the following: | 8 # This script takes an o3d cg shader from standard input and does the following: |
9 # | 9 # |
10 # * it extracts entry points to vertex and fragment shaders as specified by | 10 # * it extracts entry points to vertex and fragment shaders as specified by |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 # If there is more than one gl_Position mentioned in the shader, the | 93 # If there is more than one gl_Position mentioned in the shader, the |
94 # converter fails. | 94 # converter fails. |
95 assert len(re.findall('gl_Position', body)) == 1 | 95 assert len(re.findall('gl_Position', body)) == 1 |
96 attributes.append('vec4 _glPositionTemp;') | 96 attributes.append('vec4 _glPositionTemp;') |
97 attributes.append('uniform vec4 dx_clipping;') | 97 attributes.append('uniform vec4 dx_clipping;') |
98 body = re.sub(r'\bgl_Position\b([^;]*);', | 98 body = re.sub(r'\bgl_Position\b([^;]*);', |
99 r'_glPositionTemp\1; gl_Position = vec4(' + | 99 r'_glPositionTemp\1; gl_Position = vec4(' + |
100 r'_glPositionTemp.x + _glPositionTemp.w * dx_clipping.x, ' + | 100 r'_glPositionTemp.x + _glPositionTemp.w * dx_clipping.x, ' + |
101 r'dx_clipping.w * ' + | 101 r'dx_clipping.w * ' + |
102 r'(_glPositionTemp.y + _glPositionTemp.w * dx_clipping.y), ' + | 102 r'(_glPositionTemp.y + _glPositionTemp.w * dx_clipping.y), ' + |
103 r'_glPositionTemp.z * 2 - _glPositionTemp.w, ' + | 103 r'_glPositionTemp.z * 2.0 - _glPositionTemp.w, ' + |
104 r'_glPositionTemp.w);', body) | 104 r'_glPositionTemp.w);', body) |
105 | 105 |
106 return '\n'.join(attributes) + '\n\n' + body | 106 return '\n'.join(attributes) + '\n\n' + body |
107 | 107 |
108 | 108 |
109 def fix_glsl(glsl_shader): | 109 def fix_glsl(glsl_shader): |
110 header, body = re.split(r'\n\n', glsl_shader, 1) | 110 header, body = re.split(r'\n\n', glsl_shader, 1) |
111 assert all(l.startswith('//') for l in header.splitlines()) | 111 assert all(l.startswith('//') for l in header.splitlines()) |
112 input_mapping = get_input_mapping(header) | 112 input_mapping = get_input_mapping(header) |
113 return header + '\n\n' + fix_glsl_body(body, input_mapping) | 113 return header + '\n\n' + fix_glsl_body(body, input_mapping) |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 | 181 |
182 try: | 182 try: |
183 input = sys.stdin.read() | 183 input = sys.stdin.read() |
184 except KeyboardInterrupt: | 184 except KeyboardInterrupt: |
185 input = None | 185 input = None |
186 | 186 |
187 if not input: | 187 if not input: |
188 cmdline_parser.print_help() | 188 cmdline_parser.print_help() |
189 else: | 189 else: |
190 main(input) | 190 main(input) |
OLD | NEW |