Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5404)

Unified Diff: cg_to_glsl/convert.py

Issue 1773008: Added more logic to cg_to_glsl converter to find cgc in o3d/third_party/cgc/... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/o3d/
Patch Set: Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cg_to_glsl/convert.py
===================================================================
--- cg_to_glsl/convert.py (revision 45712)
+++ cg_to_glsl/convert.py (working copy)
@@ -28,18 +28,57 @@
# separator, and perhaps other things. For most robust behavior, try
# to find cgc on disk.
-CGC = '/usr/bin/cgc'
-if not os.path.exists(CGC):
- CGC = 'c:/Program Files (x86)/NVIDIA Corporation/Cg/bin/cgc.exe'
+def find_o3d_root():
+ path = os.path.abspath(sys.path[0])
+ for i in range(0, 5):
Alexey Marinichev 2010/04/27 21:28:16 range(5)
Ken Russell (switch to Gerrit) 2010/04/28 02:30:49 Done. Will send you a separate CL with this and th
+ path = os.path.dirname(path)
+ if (os.path.isdir(os.path.join(path, 'o3d')) and
+ os.path.isdir(os.path.join(path, 'third_party'))):
+ return path
+ return ''
+
+def default_cgc():
+ paths = [ '/usr/bin/cgc',
Alexey Marinichev 2010/04/27 21:28:16 Does chrome style prefer "[ x ]" over "[x]"?
Ken Russell (switch to Gerrit) 2010/04/28 02:30:49 Not sure. I'll get rid of the surrounding spaces.
+ 'C:/Program Files/NVIDIA Corporation/Cg/bin/cgc.exe',
+ 'C:/Program Files (x86)/NVIDIA Corporation/Cg/bin/cgc.exe' ]
+ for path in paths:
+ if os.path.exists(path):
+ return path
+ script_path = os.path.abspath(sys.path[0])
+ # Try again looking in the current working directory to match
+ # the layout of the prebuilt o3dConverter binaries.
+ cur_dir_paths = [ os.path.join(script_path, 'cgc'),
+ os.path.join(script_path, 'cgc.exe') ]
+ for path in cur_dir_paths:
+ if (os.path.exists(path)):
+ return path
+
+ # Last fallback is to use the binaries in o3d/third_party/cg/files.
+ # Unfortunately, because we can't rely on the OS name, we have to
+ # actually try running the cgc executable.
+ o3d_root = find_o3d_root();
+ cg_root = os.path.join(o3d_root, 'third_party', 'cg', 'files')
Alexey Marinichev 2010/04/27 21:28:16 'third_party/cg/files' would be more readable.
Ken Russell (switch to Gerrit) 2010/04/28 02:30:49 Unclear to me whether that is guaranteed to be fun
+ exes = [ os.path.join(cg_root, 'linux', 'bin', 'cgc'),
+ os.path.join(cg_root, 'linux', 'bin64', 'cgc'),
+ os.path.join(cg_root, 'mac', 'bin', 'cgc'),
+ os.path.join(cg_root, 'win', 'bin', 'cgc.exe') ]
+ for exe in exes:
Alexey Marinichev 2010/04/27 21:28:16 relative_paths = ['linux/bin/cgc', ....] for exe i
Alexey Marinichev 2010/04/27 23:24:09 Um, that's not exactly what I meant... You can ca
Ken Russell (switch to Gerrit) 2010/04/28 02:30:49 See above regarding my concern about funcional equ
+ try:
+ subprocess.call([exe, '-v'],
+ stdout=open(os.devnull, 'w'),
+ stderr=open(os.devnull, 'w'))
Alexey Marinichev 2010/04/27 21:28:16 Is checking if the path exists not enough? Do you
Ken Russell (switch to Gerrit) 2010/04/28 02:30:49 Unfortunately it's not enough. All three versions
+ return exe
+ except:
+ pass
+
+ # We don't know where cgc lives.
+ return ''
+
+def check_cgc(CGC):
if not os.path.exists(CGC):
- CGC = 'c:/Program Files (x86)/NVIDIA Corporation/Cg/bin/cgc.exe'
- if not os.path.exists(CGC):
- script_path = os.path.abspath(sys.path[0])
- # Try again looking in the current working directory to match
- # the layout of the prebuilt o3dConverter binaries.
- CGC = os.path.join(script_path, 'cgc')
- if not os.path.exists(CGC):
- CGC = os.path.join(script_path, 'cgc.exe')
+ print >>sys.stderr, CGC+' is not found, use --cgc option to specify its'
+ print >>sys.stderr, 'location. You may need to install nvidia cg toolkit.'
+ sys.exit(1)
# cgc complains about TANGENT1 and BINORMAL1 semantics, so we hack it by
# replacing standard semantics with ATTR8-ATTR12 and then renaming them back to
@@ -173,7 +212,7 @@
return cg_shader
-def cg_to_glsl(cg_shader):
+def cg_to_glsl(cg_shader, CGC):
cg_shader = cg_rename_attributes(cg_shader)
vertex_entry = re.search(r'#o3d\s+VertexShaderEntryPoint\s+(\w+)',
@@ -203,16 +242,9 @@
return re.search(r'(?m)^.*#o3d\s+MatrixLoadOrder\b.*$', cg_shader).group(0)
-def check_cg():
- if not os.path.exists(CGC):
- print >>sys.stderr, CGC+' is not found, use --cgc option to specify its'
- print >>sys.stderr, 'location. You may need to install nvidia cg toolkit.'
- sys.exit(1)
-
-
-def main(cg_shader):
+def main(cg_shader, CGC):
Alexey Marinichev 2010/04/27 21:28:16 I used all caps CGC to show it's a constant that's
Ken Russell (switch to Gerrit) 2010/04/28 02:30:49 I like to avoid globals so I've changed it to cgc_
matrixloadorder = get_matrixloadorder(cg_shader)
- glsl_vertex, glsl_fragment, log = cg_to_glsl(cg_shader)
+ glsl_vertex, glsl_fragment, log = cg_to_glsl(cg_shader, CGC)
print log
print fix_glsl(glsl_vertex)
@@ -224,6 +256,7 @@
if __name__ == '__main__':
+ CGC = default_cgc()
cmdline_parser = optparse.OptionParser()
cmdline_parser.add_option('-i', dest='file', default=None,
help='input shader; standard input if omitted')
@@ -231,7 +264,7 @@
help='path to cgc [default: %default]')
options, args = cmdline_parser.parse_args()
CGC = options.CGC
- check_cg()
+ check_cgc(CGC)
try:
if options.file is None:
@@ -245,4 +278,4 @@
if not input:
cmdline_parser.print_help()
else:
- main(input)
+ main(input, CGC)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698