def get_shape(self, level=0): """Returns the current texture data size at given mipmap level.""" with self: colors = gl_iformat_to_dtype[self._iformat][1] _width = _gl.GLint() _gl.glGetTexLevelParameteriv(self._target, level, _gl.GL_TEXTURE_WIDTH, _gl.pointer(_width)) if self._ndim == 2: return (_width.value, colors) _height = _gl.GLint() _gl.glGetTexLevelParameteriv(self._target, level, _gl.GL_TEXTURE_HEIGHT, _gl.pointer(_height)) if self._ndim == 3: return (_height.value, _width.value, colors) _depth = _gl.GLint() _gl.glGetTexLevelParameteriv(self._target, level, _gl.GL_TEXTURE_DEPTH, _gl.pointer(_depth)) if self._ndim == 4: return (_depth.value, _height.value, _width.value, colors)
def _log(self): with self._context: _info_log_length = _gl.GLint() _gl.glGetShaderiv(self._id, _gl.GL_INFO_LOG_LENGTH, _gl.pointer(_info_log_length)) _info_log = _gl.create_string_buffer(_info_log_length.value) _gl.glGetShaderInfoLog(self._id, _info_log_length, _gl.POINTER(_gl.GLint)(), _info_log) return _info_log.value
def source(self): with self._context: _shader_source_length = _gl.GLint() _gl.glGetShaderiv(self._id, _gl.GL_SHADER_SOURCE_LENGTH, _gl.pointer(_shader_source_length)) _source = _gl.create_string_buffer(_shader_source_length.value) _gl.glGetShaderSource(self._id, _shader_source_length, _gl.POINTER(_gl.GLint)(), _source) return _source.value
def _get_active_X(self, getter, location_getter, max_length, index): _size = _gl.GLint() _type = _gl.GLenum() _name = _gl.create_string_buffer(max_length) with self._context: getter(self._id, index, max_length, None, _gl.pointer(_size), _gl.pointer(_type), _name) location = location_getter(self._id, _name) return location, _size.value, ShaderDatatype._from_gl( _type.value), _name.value.decode("ascii")
def compile(self): with self._context: _gl.glCompileShader(self._id) _compile_status = _gl.GLint() _gl.glGetShaderiv(self._id, _gl.GL_COMPILE_STATUS, _gl.pointer(_compile_status)) if _compile_status.value != _gl.GL_TRUE: raise ShaderCompileError(self._log) return self._log or None
def __getitem__(self, index): """Get the draw buffer attached to this target. @param index: Index of the draw buffer to query. @type index: C{int} @return: The enum of the currently bound draw buffer enum, a number if it is a color attachment. @rtype: L{draw_buffers} or C{int} """ if not 0 <= index < self._num_buffers: raise IndexError _buffer = _gl.GLint() with self._context: _gl.glGetIntegerv(_gl.GL_DRAW_BUFFER0 + index, _buffer) attachment = draw_buffers[_buffer.value] if attachment.name.startswith("COLOR_ATTACHMENT"): return attachment._value - _gl.GL_COLOR_ATTACHMENT0 else: return attachment
def min_lod(self): _min_lod = _gl.GLint() _gl.glGetSamplerParameteriv(self._id, _gl.GL_TEXTURE_MIN_LOD, _gl.pointer(_min_lod)) return _min_lod.value
def mag_filter(self, mag_filter): _mag_filter = _gl.GLint(self.mag_filters(mag_filter)._value) _gl.glSamplerParameteriv(self._id, _gl.GL_TEXTURE_MAG_FILTER, _gl.pointer(_mag_filter))
def _size(self): _size = _gl.GLint() with self: _gl.glGetBufferParameteriv(self._target, _gl.GL_BUFFER_SIZE, _gl.pointer(_size)) return _size.value
def max_level(self, max_level): with self: _gl.glTexParameterIiv(self._target, _gl.GL_TEXTURE_MAX_LEVEL, _gl.pointer(_gl.GLint(max_level)))
def max_lod(self, max_lod): with self: _gl.glTexParameterIiv(self._target, _gl.GL_TEXTURE_MAX_LOD, _gl.pointer(_gl.GLint(max_lod)))
def base_level(self, base_level): with self: _gl.glTexParameterIiv(self._target, _gl.GL_TEXTURE_BASE_LEVEL, _gl.pointer(_gl.GLint(base_level)))
def _iformat(self): _iformat = _gl.GLint() with self: _gl.glGetTexLevelParameteriv(self._target, 0, _gl.GL_TEXTURE_INTERNAL_FORMAT, _gl.pointer(_iformat)) return _iformat.value
def wrap_r(self, wrap_r): _wrap_r = _gl.GLint(self.wrapmodes(wrap_r)._value) _gl.glSamplerParameteriv(self._id, _gl.GL_TEXTURE_WRAP_R, _gl.pointer(_wrap_r))
def wrap_r(self): _wrap_r = _gl.GLint() _gl.glGetSamplerParameteriv(self._id, _gl.GL_TEXTURE_WRAP_R, _gl.pointer(_wrap_r)) return self.wrapmodes[_wrap_r.value]
def wrap_s(self, wrap_s): _wrap_s = _gl.GLint(self.wrapmodes(wrap_s)._value) _gl.glSamplerParameteriv(self._id, _gl.GL_TEXTURE_WRAP_S, _gl.pointer(_wrap_s))
def max_lod(self, max_lod): _gl.glSamplerParameteriv(self._id, _gl.GL_TEXTURE_MAX_LOD, _gl.pointer(_gl.GLint(max_lod)))
def min_lod(self, min_lod): _gl.glSamplerParameteriv(self._id, _gl.GL_TEXTURE_MIN_LOD, _gl.pointer(_gl.GLint(min_lod)))
def usage(self): _usage = _gl.GLint() with self: _gl.glGetBufferParameteriv(self._target, _gl.GL_BUFFER_USAGE, _gl.pointer(_usage)) return BaseBuffer.usages[_usage.value]
def compare_func(self): _compare_func = _gl.GLint() _gl.glGetSamplerParameteriv(self._id, _gl.GL_TEXTURE_COMPARE_FUNC, _gl.pointer(_compare_func)) return self.compare_funcs[_compare_func.value]
def _current_query(self): _current_query = _gl.GLint() _gl.glGetQueryiv(self._target, _gl.GL_CURRENT_QUERY, _gl.pointer(_current_query)) return _current_query.value
def compare_func(self, compare_func): _compare_func = _gl.GLint(self.compare_funcs(compare_func)._value) _gl.glSamplerParameteriv(self._id, _gl.GL_TEXTURE_COMPARE_FUNC, _gl.pointer(_compare_func))
def base_level(self): _base_level = _gl.GLint() with self: _gl.glGetTexParameterIiv(self._target, _gl.GL_TEXTURE_BASE_LEVEL, _gl.pointer(_base_level)) return _base_level.value
def _counter_bits(self): _counter_bits = _gl.GLint() _gl.glGetQueryiv(self._target, _gl.GL_QUERY_COUNTER_BITS, _gl.pointer(_counter_bits)) return _counter_bits.value
def max_lod(self): _max_lod = _gl.GLint() with self: _gl.glGetTexParameterIiv(self._target, _gl.GL_TEXTURE_MAX_LOD, _gl.pointer(_max_lod)) return _max_lod.value
def compare_mode(self, compare_mode): _compare_mode = _gl.GLint(self.compare_modes(compare_mode)._value) _gl.glSamplerParameteriv(self._id, _gl.GL_TEXTURE_COMPARE_MODE, _gl.pointer(_compare_mode))
def max_level(self): _max_level = _gl.GLint() with self: _gl.glGetTexParameterIiv(self._target, _gl.GL_TEXTURE_MAX_LEVEL, _gl.pointer(_max_level)) return _max_level.value
def mag_filter(self): _mag_filter = _gl.GLint() _gl.glGetSamplerParameteriv(self._id, _gl.GL_TEXTURE_MAG_FILTER, _gl.pointer(_mag_filter)) return self.mag_filters[_mag_filter.value]
def compare_mode(self): _compare_mode = _gl.GLint() _gl.glGetSamplerParameteriv(self._id, _gl.GL_TEXTURE_COMPARE_MODE, _gl.pointer(_compare_mode)) return self.compare_modes[_compare_mode.value]
def result_available(self): _result_available = _gl.GLint() _gl.glGetQueryObjectiv(self._id, _gl.GL_QUERY_RESULT_AVAILABLE, _gl.pointer(_result_available)) return bool(_result_available.value)