Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
out += 'Backend: %s\n' % this_app.backend_name
out += 'Qt: %s\n' % backends.has_qt(return_which=True)[1]
out += 'Pyglet: %s\n' % backends.has_pyglet(return_which=True)[1]
out += 'glfw: %s\n' % backends.has_glfw(return_which=True)[1]
out += 'glut: %s\n' % backends.has_glut(return_which=True)[1]
out += '\n'
# We need an OpenGL context to get GL info
if 'glut' in this_app.backend_name.lower():
# glut causes problems
out += 'OpenGL information omitted for glut backend\n'
else:
canvas = Canvas('Test', (10, 10), show=False, app=this_app)
canvas._backend._vispy_set_current()
out += 'GL version: %s\n' % gl.glGetParameter(gl.GL_VERSION)
x_ = gl.GL_MAX_TEXTURE_SIZE
out += 'MAX_TEXTURE_SIZE: %d\n' % gl.glGetParameter(x_)
out += 'Extensions: %s\n' % gl.glGetParameter(gl.GL_EXTENSIONS)
canvas.close()
except Exception: # don't stop printing info
out += '\nInfo-gathering error:\n%s' % traceback.format_exc()
pass
if fname is not None:
with open(fname, 'w') as fid:
fid.write(out)
return out
def new_explosion(self):
n = len(self.data)
color = np.random.uniform(0.1, 0.9, 4).astype(np.float32)
color[3] = 1.0 / n ** 0.08
loc = gl.glGetUniformLocation(self.program, "color")
gl.glUniform4f(loc, *color)
center = np.random.uniform(-0.5, 0.5, 3)
loc = gl.glGetUniformLocation(self.program, "center")
gl.glUniform3f(loc, *center)
self.data['lifetime'] = np.random.normal(2.0, 0.5, (n,))
self.data['start'] = np.random.normal(0.0, 0.2, (n, 3))
self.data['end'] = np.random.normal(0.0, 1.2, (n, 3))
gl.glBufferData(gl.GL_ARRAY_BUFFER, self.data, gl.GL_DYNAMIC_DRAW)
count : int
The number of vertices to draw. Default all.
"""
self.activate()
attributes = self._attributes.values()
# Get buffer size first attribute
# We need more tests here
# - do we have at least 1 attribute ?
# - does all attributes report same count ?
# count = (count or attributes[0].size) - first
if isinstance(indices, IndexBuffer):
indices.activate()
gltypes = {np.dtype(np.uint8): gl.GL_UNSIGNED_BYTE,
np.dtype(np.uint16): gl.GL_UNSIGNED_SHORT,
np.dtype(np.uint32): gl.GL_UNSIGNED_INT}
gl.glDrawElements(mode, indices.size, gltypes[indices.dtype], None)
indices.deactivate()
else:
#count = (count or attributes[0].size) - first
first = 0
count = attributes[0].size
gl.glDrawArrays(mode, first, count)
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, 0)
self.deactivate()
# Check ok
if check_error:
gl.check_error()
self.view = getView(self.azimuth, self.elevation, self.distance)
self.model = np.eye(4, dtype=np.float32)
self.projection = np.eye(4, dtype=np.float32)
self.program = gloo.Program(vertex_shader, fragment_shader, count=24)
self.program['a_position'] = faces*self.cubeSize
self.program['a_texcoord'] = faces
self.program['a_texture'] = gloo.TextureCube(texture, interpolation='linear')
self.program['u_model'] = self.model
self.program['u_view'] = self.view
gloo.set_viewport(0, 0, *self.physical_size)
self.projection = perspective(60.0, self.size[0] /
float(self.size[1]), 1.0, 100.0)
self.program['u_projection'] = self.projection
gl.glEnable(gl.GL_DEPTH_TEST)
gloo.set_clear_color('black')
self.show()
def _pre_draw(self):
self.activate()
# Activate textures
for tex_target, tex_handle, unit in self._samplers.values():
gl.glActiveTexture(gl.GL_TEXTURE0 + unit)
gl.glBindTexture(tex_target, tex_handle)
# Activate attributes
for vbo_handle, attr_handle, func, args in self._attributes.values():
if vbo_handle:
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, vbo_handle)
gl.glEnableVertexAttribArray(attr_handle)
func(attr_handle, *args)
else:
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, 0)
gl.glDisableVertexAttribArray(attr_handle)
func(attr_handle, *args)
# Validate. We need to validate after textures units get assigned
if not self._validated:
self._validated = True
self._validate()
from .texture import GL_SAMPLER_3D
# ------------------------------------------------------------ Shader class ---
class Shader(GLObject):
""" Abstract shader class
Parameters
----------
code: str
code can be a filename or the actual code
"""
_gtypes = {
'float': gl.GL_FLOAT,
'vec2': gl.GL_FLOAT_VEC2,
'vec3': gl.GL_FLOAT_VEC3,
'vec4': gl.GL_FLOAT_VEC4,
'int': gl.GL_INT,
'ivec2': gl.GL_INT_VEC2,
'ivec3': gl.GL_INT_VEC3,
'ivec4': gl.GL_INT_VEC4,
'bool': gl.GL_BOOL,
'bvec2': gl.GL_BOOL_VEC2,
'bvec3': gl.GL_BOOL_VEC3,
'bvec4': gl.GL_BOOL_VEC4,
'mat2': gl.GL_FLOAT_MAT2,
'mat3': gl.GL_FLOAT_MAT3,
'mat4': gl.GL_FLOAT_MAT4,
# 'sampler1D': gl.GL_SAMPLER_1D,
'sampler2D': gl.GL_SAMPLER_2D,
elif isinstance(buffer, RenderBuffer):
buffer.activate()
gl.glFramebufferRenderbuffer(gl.GL_FRAMEBUFFER, attachment,
gl.GL_RENDERBUFFER, buffer.handle)
buffer.deactivate()
elif isinstance(buffer, Texture2D):
buffer.activate()
# INFO: 0 is for mipmap level 0 (default) of the texture
gl.glFramebufferTexture2D(gl.GL_FRAMEBUFFER, attachment,
buffer.target, buffer.handle, 0)
buffer.deactivate()
else:
raise ValueError("Invalid attachment")
if 1:
res = gl.glCheckFramebufferStatus(gl.GL_FRAMEBUFFER)
if res == gl.GL_FRAMEBUFFER_COMPLETE:
pass
elif res == 0:
raise RuntimeError('Target not equal to GL_FRAMEBUFFER')
elif res == gl.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
raise RuntimeError(
'FrameBuffer attachments are incomplete.')
elif res == gl.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
raise RuntimeError(
'No valid attachments in the FrameBuffer.')
elif res == gl.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
raise RuntimeError(
'attachments do not have the same width and height.')
elif res == gl.GL_FRAMEBUFFER_INCOMPLETE_FORMATS:
raise RuntimeError('Internal format of attachment '
'is not renderable.')
def convert_to_enum(param, allow_none=False):
""" Convert parameter (e.g. a string) to GL enum.
"""
if isinstance(param, string_types):
param = param.upper()
if not param.startswith('GL'):
param = 'GL_' + param
try:
param = getattr(gl, param)
except AttributeError:
raise ValueError('Unknown GL enum: "%s".' % param)
elif isinstance(param, int):
pass # We assume this is a valid enum
elif param is None and allow_none:
pass
else:
raise ValueError('Invalid type for GL enum: %r.' % type(param))
return param
def on_initialize(self, event):
gl.glClearColor(1,1,1,1)
gl.glEnable(gl.GL_DEPTH_TEST)
if 1:
res = gl.glCheckFramebufferStatus(gl.GL_FRAMEBUFFER)
if res == gl.GL_FRAMEBUFFER_COMPLETE:
pass
elif res == 0:
raise RuntimeError('Target not equal to GL_FRAMEBUFFER')
elif res == gl.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
raise RuntimeError(
'FrameBuffer attachments are incomplete.')
elif res == gl.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
raise RuntimeError(
'No valid attachments in the FrameBuffer.')
elif res == gl.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
raise RuntimeError(
'attachments do not have the same width and height.')
elif res == gl.GL_FRAMEBUFFER_INCOMPLETE_FORMATS:
raise RuntimeError('Internal format of attachment '
'is not renderable.')
elif res == gl.GL_FRAMEBUFFER_UNSUPPORTED:
raise RuntimeError('Combination of internal formats used '
'by attachments is not supported.')