Skip to content

Instantly share code, notes, and snippets.

@pyalot
Last active December 24, 2015 09:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pyalot/6775935 to your computer and use it in GitHub Desktop.
Save pyalot/6775935 to your computer and use it in GitHub Desktop.
ESSL shader error instrumentation
preprocess: (source) ->
lines = []
result = []
filename = 'no file'
lineno = 1
for line in source.split('\n')
match = line.match /#line (\d+) (.*)/
if match
lineno = parseInt(match[1], 10)+1
filename = match[2]
else
lines.push
source: line
lineno: lineno
filename: filename
result.push line
lineno += 1
return [result.join('\n'), lines]
translateError: (error, lines) ->
result = ['Shader Compile Error']
for line, i in error.split('\n')
match = line.match /ERROR: \d+:(\d+): (.*)/
if match
lineno = parseFloat(match[1])-1
message = match[2]
sourceline = lines[lineno]
result.push "File \"#{sourceline.filename}\", Line #{sourceline.lineno}, #{message}"
result.push " #{sourceline.source}"
else
result.push line
return result.join('\n')
esslRe = re.compile(
'|'.join([
"'''essl.*?'''",
'"""essl.*?"""',
"'essl.*?'",
'"essl.*?"',
]),
re.M | re.DOTALL
)
def preprocess(source, name):
def replace(match):
text = match.group()
quote, text = splitquote(text)
lineno = source.count("\n", 0, match.start())
result = []
for i, line in enumerate(text.split('\n')):
result.append('#line %i %s\\n%s' % (i+lineno, name, line))
return quote + '\n'.join(result) + quote
return esslRe.sub(replace, source)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment