Fix NTSC shaders by preprocessing first.

If vertex shader is in an #include, it wouldn't get column_major fix
applied.
This commit is contained in:
Themaister 2013-10-07 23:06:41 +02:00
parent fa39a1ec39
commit 4627c106e4
1 changed files with 15 additions and 7 deletions

View File

@ -546,11 +546,19 @@ def preprocess_vertex(source_data):
return '\n'.join(ret) return '\n'.join(ret)
def convert(source, dest): def convert(source, dest):
vert_cmd = ['cgc', '-profile', 'glesv', '-entry', 'main_vertex', '-quiet', '-I', os.path.split(source)[0]] # Have to preprocess first to resolve #includes so we can hack potential vertex shaders.
with open(source, 'r') as f: vert_cmd_preprocess = ['cgc', '-E', '-I', os.path.split(source)[0], source]
source_data = f.read() p = subprocess.Popen(vert_cmd_preprocess, stderr = subprocess.PIPE, stdout = subprocess.PIPE)
source_data, stderr_ret = p.communicate()
log(stderr_ret.decode())
if p.returncode != 0:
log('Vertex preprocessing failed ...')
source_data = preprocess_vertex(source_data.decode())
vert_cmd = ['cgc', '-profile', 'glesv', '-entry', 'main_vertex', '-quiet']
p = subprocess.Popen(vert_cmd, stdin = subprocess.PIPE, stderr = subprocess.PIPE, stdout = subprocess.PIPE) p = subprocess.Popen(vert_cmd, stdin = subprocess.PIPE, stderr = subprocess.PIPE, stdout = subprocess.PIPE)
source_data = preprocess_vertex(source_data)
vertex_source, stderr_ret = p.communicate(input = source_data.encode()) vertex_source, stderr_ret = p.communicate(input = source_data.encode())
log(stderr_ret.decode()) log(stderr_ret.decode())
vertex_source = vertex_source.decode() vertex_source = vertex_source.decode()
@ -559,9 +567,9 @@ def convert(source, dest):
log('Vertex compilation failed ...') log('Vertex compilation failed ...')
return 1 return 1
frag_cmd = ['cgc', '-profile', 'glesf', '-entry', 'main_fragment', '-quiet', source] frag_cmd = ['cgc', '-profile', 'glesf', '-entry', 'main_fragment', '-quiet']
p = subprocess.Popen(frag_cmd, stderr = subprocess.PIPE, stdout = subprocess.PIPE) p = subprocess.Popen(frag_cmd, stdin = subprocess.PIPE, stderr = subprocess.PIPE, stdout = subprocess.PIPE)
fragment_source, stderr_ret = p.communicate() fragment_source, stderr_ret = p.communicate(input = source_data.encode())
log(stderr_ret.decode()) log(stderr_ret.decode())
fragment_source = fragment_source.decode() fragment_source = fragment_source.decode()