def _test_object_creation_and_deletion(): # Stuff that is originally glGenX # Note that if we test glIsTexture(x), we cannot assume x to be a # nonexisting texture; we might have created a texture in another # test and failed to clean it up. # Create/delete texture #assert_equal(gl.glIsTexture(12), False) handle = gl.glCreateTexture() gl.glBindTexture(gl.GL_TEXTURE_2D, handle) assert_equal(gl.glIsTexture(handle), True) gl.glDeleteTexture(handle) assert_equal(gl.glIsTexture(handle), False) # Create/delete buffer #assert_equal(gl.glIsBuffer(12), False) handle = gl.glCreateBuffer() gl.glBindBuffer(gl.GL_ARRAY_BUFFER, handle) assert_equal(gl.glIsBuffer(handle), True) gl.glDeleteBuffer(handle) assert_equal(gl.glIsBuffer(handle), False) # Create/delete framebuffer #assert_equal(gl.glIsFramebuffer(12), False) handle = gl.glCreateFramebuffer() gl.glBindFramebuffer(gl.GL_FRAMEBUFFER, handle) assert_equal(gl.glIsFramebuffer(handle), True) gl.glDeleteFramebuffer(handle) assert_equal(gl.glIsFramebuffer(handle), False) # Create/delete renderbuffer #assert_equal(gl.glIsRenderbuffer(12), False) handle = gl.glCreateRenderbuffer() gl.glBindRenderbuffer(gl.GL_RENDERBUFFER, handle) assert_equal(gl.glIsRenderbuffer(handle), True) gl.glDeleteRenderbuffer(handle) assert_equal(gl.glIsRenderbuffer(handle), False) # Stuff that is originally called glCreate # Create/delete program #assert_equal(gl.glIsProgram(12), False) handle = gl.glCreateProgram() assert_equal(gl.glIsProgram(handle), True) gl.glDeleteProgram(handle) assert_equal(gl.glIsProgram(handle), False) # Create/delete shader #assert_equal(gl.glIsShader(12), False) handle = gl.glCreateShader(gl.GL_VERTEX_SHADER) assert_equal(gl.glIsShader(handle), True) gl.glDeleteShader(handle) assert_equal(gl.glIsShader(handle), False) gl.check_error()
def draw(self): if self._glsl: fragment = fragment_template % self._glsl self._glsl = None # Check to see if the shader will compile successfully before we # set it. We do this here because the ShaderWatcher runs in a # different thread and so can't access the GL context. frag_handle = gl.glCreateShader(gl.GL_FRAGMENT_SHADER) gl.glShaderSource(frag_handle, fragment) gl.glCompileShader(frag_handle) status = gl.glGetShaderParameter(frag_handle, gl.GL_COMPILE_STATUS) if not status: errors = gl.glGetShaderInfoLog(frag_handle) errors = self.process_errors(errors) print("Shader failed to compile:", file=sys.stderr) print(errors, file=sys.stderr) # Switch to error shader self._glsl = error_shader self.update() else: self.program.set_shaders(vertex, fragment) gl.glDeleteShader(frag_handle) if self._interactive: self.program.draw() if self._ffmpeg_pipe is not None: img = _screenshot() self.write_video_frame(img) self._render_frame_index += 1 if self._render_frame_count is not None and self._render_frame_index >= self._render_frame_count: app.quit() return self.advance_time() else: with self._fbo: rs = list(self._render_size) if self._tile_coord[0] + rs[0] > self._output_size[0]: rs[0] = self._output_size[0] - self._tile_coord[0] if self._tile_coord[1] + rs[1] > self._output_size[1]: rs[1] = self._output_size[1] - self._tile_coord[1] gloo.set_viewport(0, 0, *rs) self.program['iOffset'] = self._tile_coord self.program.draw() img = _screenshot() row = self._output_size[1] - self._tile_coord[1] - rs[1] col = self._tile_coord[0] self._img[row:row + rs[1], col:col + rs[0], :] = img
def draw(self): for i in range(4): if self._bufXglsl[i]: fragment = fragment_template % self._bufXglsl[i] self._bufXglsl[i] = None frag_handle = gl.glCreateShader(gl.GL_FRAGMENT_SHADER) gl.glShaderSource(frag_handle, fragment) gl.glCompileShader(frag_handle) status = gl.glGetShaderParameter(frag_handle, gl.GL_COMPILE_STATUS) if not status: errors = gl.glGetShaderInfoLog(frag_handle) errors = self.process_errors(errors) print('Shader failed to compile:', file=sys.stderr) print(errors, file=sys.stderr) exit(1) else: self._BufX[i].set_shaders(vertex, fragment) gl.glDeleteShader(frag_handle) if self._glsl: fragment = fragment_template % self._glsl self._glsl = None # Check to see if the shader will compile successfully before we # set it. We do this here because the ShaderWatcher runs in a # different thread and so can't access the GL context. frag_handle = gl.glCreateShader(gl.GL_FRAGMENT_SHADER) gl.glShaderSource(frag_handle, fragment) gl.glCompileShader(frag_handle) status = gl.glGetShaderParameter(frag_handle, gl.GL_COMPILE_STATUS) if not status: errors = gl.glGetShaderInfoLog(frag_handle) errors = self.process_errors(errors) print('Shader failed to compile:', file=sys.stderr) print(errors, file=sys.stderr) exit(1) # Switch to error shader self._glsl = error_shader self.update() else: self.program.set_shaders(vertex, fragment) gl.glDeleteShader(frag_handle) if self._interactive: for i in range(4): with self._fboX[self._doubleFboid][i]: gloo.set_clear_color((0.0, 0.0, 0.0, 0.0)) gloo.clear(color=True, depth=True) gloo.set_viewport(0, 0, *self.physical_size) self._BufX[i].draw() self.program.draw() if self._ffmpeg_pipe is not None: img = _screenshot() self.write_video_frame(img) self._render_frame_index += 1 if self._render_frame_count is not None \ and self._render_frame_index \ >= self._render_frame_count: app.quit() return self._doubleFbo = not self._doubleFbo self._doubleFboid=(0 if self._doubleFbo else 1) self.advance_time() self.program['iFrame'] = self._render_frame_index self.set_Buf_uniform('iFrame' , self._render_frame_index) self.set_channel_input() self.set_Buf_channel_input() else: for i in range(4): with self._fboX[self._doubleFboid][i]: gloo.set_clear_color((0.0, 0.0, 0.0, 0.0)) gloo.clear(color=True, depth=True) gloo.set_viewport(0, 0, *self.physical_size) self._BufX[i].draw() with self._fbo: rs = list(self._render_size) if self._tile_coord[0] + rs[0] > self._output_size[0]: rs[0] = self._output_size[0] - self._tile_coord[0] if self._tile_coord[1] + rs[1] > self._output_size[1]: rs[1] = self._output_size[1] - self._tile_coord[1] gloo.set_viewport(0, 0, *rs) self.program['iOffset'] = self._tile_coord self.program.draw() self._doubleFbo = not self._doubleFbo self._doubleFboid=(0 if self._doubleFbo else 1) self.program['iFrame'] = self._render_frame_index self.set_Buf_uniform('iFrame' , self._render_frame_index) self.set_channel_input() self.set_Buf_channel_input() img = _screenshot() row = self._output_size[1] - self._tile_coord[1] - rs[1] col = self._tile_coord[0] self._img[row:row + rs[1], col:col + rs[0], :] = img