def setup_shaders(gltf, uri_path):
"""Loads and compiles all shaders defined or referenced in the given gltf."""
shader_ids = {}
for shader_name, shader in gltf['shaders'].items():
uri = shader['uri']
if uri.startswith('data:text/plain;base64,'):
shader_str = base64.urlsafe_b64decode(uri.split(',')[1]).decode()
_logger.debug('* decoded shader "%s":\n%s', shader_name, shader_str)
else:
filename = os.path.join(uri_path, shader['uri'])
shader_str = open(filename).read()
_logger.debug('* loaded shader "%s" (from %s):\n%s', shader_name, filename, shader_str)
shader_id = gl.glCreateShader(shader['type'])
gl.glShaderSource(shader_id, shader_str)
gl.glCompileShader(shader_id)
if not gl.glGetShaderiv(shader_id, gl.GL_COMPILE_STATUS):
raise Exception('failed to compile shader "%s":\n%s' % (shader_name, gl.glGetShaderInfoLog(shader_id).decode()))
_logger.debug('* compiled shader "%s"', shader_name)
shader_ids[shader_name] = shader_id
return shader_ids
评论列表
文章目录