Ensure we dont exceed GL_MAX_TEXTURE_BUFFER_SIZE
This commit is contained in:
parent
313253cd95
commit
be06669e8f
@ -744,7 +744,7 @@ int add_module_gl_constants(PyObject *module) {
|
|||||||
GLC(GL_COMPILE_STATUS);
|
GLC(GL_COMPILE_STATUS);
|
||||||
GLC(GL_LINK_STATUS);
|
GLC(GL_LINK_STATUS);
|
||||||
GLC(GL_TEXTURE0); GLC(GL_TEXTURE1); GLC(GL_TEXTURE2); GLC(GL_TEXTURE3); GLC(GL_TEXTURE4); GLC(GL_TEXTURE5); GLC(GL_TEXTURE6); GLC(GL_TEXTURE7); GLC(GL_TEXTURE8);
|
GLC(GL_TEXTURE0); GLC(GL_TEXTURE1); GLC(GL_TEXTURE2); GLC(GL_TEXTURE3); GLC(GL_TEXTURE4); GLC(GL_TEXTURE5); GLC(GL_TEXTURE6); GLC(GL_TEXTURE7); GLC(GL_TEXTURE8);
|
||||||
GLC(GL_MAX_ARRAY_TEXTURE_LAYERS);
|
GLC(GL_MAX_ARRAY_TEXTURE_LAYERS); GLC(GL_TEXTURE_BINDING_BUFFER); GLC(GL_MAX_TEXTURE_BUFFER_SIZE);
|
||||||
GLC(GL_MAX_TEXTURE_SIZE);
|
GLC(GL_MAX_TEXTURE_SIZE);
|
||||||
GLC(GL_TEXTURE_2D_ARRAY);
|
GLC(GL_TEXTURE_2D_ARRAY);
|
||||||
GLC(GL_LINEAR); GLC(GL_CLAMP_TO_EDGE); GLC(GL_NEAREST);
|
GLC(GL_LINEAR); GLC(GL_CLAMP_TO_EDGE); GLC(GL_NEAREST);
|
||||||
|
|||||||
@ -4,28 +4,28 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from ctypes import addressof, sizeof
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
from ctypes import addressof, sizeof
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from threading import Lock
|
from threading import Lock
|
||||||
|
|
||||||
from .fast_data_types import (
|
from .fast_data_types import (
|
||||||
BOLD, GL_ARRAY_BUFFER, GL_CLAMP_TO_EDGE, GL_COMPILE_STATUS, GL_FLOAT,
|
BOLD, GL_ARRAY_BUFFER, GL_CLAMP_TO_EDGE, GL_COMPILE_STATUS, GL_FLOAT,
|
||||||
GL_FRAGMENT_SHADER, GL_LINK_STATUS, GL_MAX_ARRAY_TEXTURE_LAYERS,
|
GL_FRAGMENT_SHADER, GL_LINK_STATUS, GL_MAX_ARRAY_TEXTURE_LAYERS,
|
||||||
GL_MAX_TEXTURE_SIZE, GL_NEAREST, GL_R8, GL_R32UI, GL_RED, GL_STATIC_DRAW,
|
GL_MAX_TEXTURE_BUFFER_SIZE, GL_MAX_TEXTURE_SIZE, GL_NEAREST, GL_R8,
|
||||||
GL_STREAM_DRAW, GL_TEXTURE0, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BUFFER,
|
GL_R32UI, GL_RED, GL_STATIC_DRAW, GL_STREAM_DRAW, GL_TEXTURE0,
|
||||||
GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S,
|
GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BUFFER, GL_TEXTURE_MAG_FILTER,
|
||||||
GL_TEXTURE_WRAP_T, GL_TRUE, GL_UNPACK_ALIGNMENT, GL_UNSIGNED_BYTE,
|
GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, GL_TRUE,
|
||||||
GL_VERTEX_SHADER, ITALIC, SpriteMap, copy_image_sub_data, glActiveTexture,
|
GL_UNPACK_ALIGNMENT, GL_UNSIGNED_BYTE, GL_VERTEX_SHADER, ITALIC, SpriteMap,
|
||||||
glAttachShader, glBindBuffer, glBindTexture, glBindVertexArray,
|
copy_image_sub_data, glActiveTexture, glAttachShader, glBindBuffer,
|
||||||
glCompileShader, glCopyImageSubData, glCreateProgram, glCreateShader,
|
glBindTexture, glBindVertexArray, glCompileShader, glCopyImageSubData,
|
||||||
glDeleteBuffer, glDeleteProgram, glDeleteShader, glDeleteTexture,
|
glCreateProgram, glCreateShader, glDeleteBuffer, glDeleteProgram,
|
||||||
glEnableVertexAttribArray, glGenBuffers, glGenTextures, glGenVertexArrays,
|
glDeleteShader, glDeleteTexture, glEnableVertexAttribArray, glGenBuffers,
|
||||||
glGetAttribLocation, glGetBufferSubData, glGetIntegerv,
|
glGenTextures, glGenVertexArrays, glGetAttribLocation, glGetBufferSubData,
|
||||||
glGetProgramInfoLog, glGetProgramiv, glGetShaderInfoLog, glGetShaderiv,
|
glGetIntegerv, glGetProgramInfoLog, glGetProgramiv, glGetShaderInfoLog,
|
||||||
glGetUniformLocation, glLinkProgram, glNamedBufferData, glPixelStorei,
|
glGetShaderiv, glGetUniformLocation, glLinkProgram, glNamedBufferData,
|
||||||
glShaderSource, glTexBuffer, glTexParameteri, glTexStorage3D,
|
glPixelStorei, glShaderSource, glTexBuffer, glTexParameteri,
|
||||||
glTexSubImage3D, glUseProgram, glVertexAttribPointer,
|
glTexStorage3D, glTexSubImage3D, glUseProgram, glVertexAttribPointer,
|
||||||
replace_or_create_buffer
|
replace_or_create_buffer
|
||||||
)
|
)
|
||||||
from .fonts.render import render_cell
|
from .fonts.render import render_cell
|
||||||
@ -66,6 +66,7 @@ class Sprites:
|
|||||||
self.texture_unit = GL_TEXTURE0 + self.sampler_num
|
self.texture_unit = GL_TEXTURE0 + self.sampler_num
|
||||||
self.buffer_texture_unit = GL_TEXTURE0 + self.buffer_sampler_num
|
self.buffer_texture_unit = GL_TEXTURE0 + self.buffer_sampler_num
|
||||||
self.backend = SpriteMap(glGetIntegerv(GL_MAX_TEXTURE_SIZE), glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS))
|
self.backend = SpriteMap(glGetIntegerv(GL_MAX_TEXTURE_SIZE), glGetIntegerv(GL_MAX_ARRAY_TEXTURE_LAYERS))
|
||||||
|
self.max_texture_buffer_size = glGetIntegerv(GL_MAX_TEXTURE_BUFFER_SIZE)
|
||||||
self.lock = Lock()
|
self.lock = Lock()
|
||||||
|
|
||||||
def do_layout(self, cell_width=1, cell_height=1):
|
def do_layout(self, cell_width=1, cell_height=1):
|
||||||
@ -173,6 +174,9 @@ class Sprites:
|
|||||||
def set_sprite_map(self, buf_id, data, usage=GL_STREAM_DRAW):
|
def set_sprite_map(self, buf_id, data, usage=GL_STREAM_DRAW):
|
||||||
prev_sz = self.prev_sprite_map_sizes[buf_id]
|
prev_sz = self.prev_sprite_map_sizes[buf_id]
|
||||||
new_sz = sizeof(data)
|
new_sz = sizeof(data)
|
||||||
|
if new_sz // 4 > self.max_texture_buffer_size:
|
||||||
|
raise RuntimeError(('The OpenGL implementation on your system has a max_texture_buffer_size of {} which'
|
||||||
|
' is insufficient for the sprite_map').format(self.max_texture_buffer_size))
|
||||||
replace_or_create_buffer(buf_id, new_sz, prev_sz, addressof(data), usage)
|
replace_or_create_buffer(buf_id, new_sz, prev_sz, addressof(data), usage)
|
||||||
self.prev_sprite_map_sizes[buf_id] = new_sz
|
self.prev_sprite_map_sizes[buf_id] = new_sz
|
||||||
if False:
|
if False:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user