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_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_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_TEXTURE_2D_ARRAY);
|
||||
GLC(GL_LINEAR); GLC(GL_CLAMP_TO_EDGE); GLC(GL_NEAREST);
|
||||
|
||||
@ -4,28 +4,28 @@
|
||||
|
||||
import os
|
||||
import sys
|
||||
from ctypes import addressof, sizeof
|
||||
from collections import defaultdict
|
||||
from ctypes import addressof, sizeof
|
||||
from functools import lru_cache
|
||||
from threading import Lock
|
||||
|
||||
from .fast_data_types import (
|
||||
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_MAX_TEXTURE_SIZE, GL_NEAREST, GL_R8, GL_R32UI, GL_RED, GL_STATIC_DRAW,
|
||||
GL_STREAM_DRAW, GL_TEXTURE0, GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BUFFER,
|
||||
GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S,
|
||||
GL_TEXTURE_WRAP_T, GL_TRUE, GL_UNPACK_ALIGNMENT, GL_UNSIGNED_BYTE,
|
||||
GL_VERTEX_SHADER, ITALIC, SpriteMap, copy_image_sub_data, glActiveTexture,
|
||||
glAttachShader, glBindBuffer, glBindTexture, glBindVertexArray,
|
||||
glCompileShader, glCopyImageSubData, glCreateProgram, glCreateShader,
|
||||
glDeleteBuffer, glDeleteProgram, glDeleteShader, glDeleteTexture,
|
||||
glEnableVertexAttribArray, glGenBuffers, glGenTextures, glGenVertexArrays,
|
||||
glGetAttribLocation, glGetBufferSubData, glGetIntegerv,
|
||||
glGetProgramInfoLog, glGetProgramiv, glGetShaderInfoLog, glGetShaderiv,
|
||||
glGetUniformLocation, glLinkProgram, glNamedBufferData, glPixelStorei,
|
||||
glShaderSource, glTexBuffer, glTexParameteri, glTexStorage3D,
|
||||
glTexSubImage3D, glUseProgram, glVertexAttribPointer,
|
||||
GL_MAX_TEXTURE_BUFFER_SIZE, GL_MAX_TEXTURE_SIZE, GL_NEAREST, GL_R8,
|
||||
GL_R32UI, GL_RED, GL_STATIC_DRAW, GL_STREAM_DRAW, GL_TEXTURE0,
|
||||
GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BUFFER, GL_TEXTURE_MAG_FILTER,
|
||||
GL_TEXTURE_MIN_FILTER, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, GL_TRUE,
|
||||
GL_UNPACK_ALIGNMENT, GL_UNSIGNED_BYTE, GL_VERTEX_SHADER, ITALIC, SpriteMap,
|
||||
copy_image_sub_data, glActiveTexture, glAttachShader, glBindBuffer,
|
||||
glBindTexture, glBindVertexArray, glCompileShader, glCopyImageSubData,
|
||||
glCreateProgram, glCreateShader, glDeleteBuffer, glDeleteProgram,
|
||||
glDeleteShader, glDeleteTexture, glEnableVertexAttribArray, glGenBuffers,
|
||||
glGenTextures, glGenVertexArrays, glGetAttribLocation, glGetBufferSubData,
|
||||
glGetIntegerv, glGetProgramInfoLog, glGetProgramiv, glGetShaderInfoLog,
|
||||
glGetShaderiv, glGetUniformLocation, glLinkProgram, glNamedBufferData,
|
||||
glPixelStorei, glShaderSource, glTexBuffer, glTexParameteri,
|
||||
glTexStorage3D, glTexSubImage3D, glUseProgram, glVertexAttribPointer,
|
||||
replace_or_create_buffer
|
||||
)
|
||||
from .fonts.render import render_cell
|
||||
@ -66,6 +66,7 @@ class Sprites:
|
||||
self.texture_unit = GL_TEXTURE0 + self.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.max_texture_buffer_size = glGetIntegerv(GL_MAX_TEXTURE_BUFFER_SIZE)
|
||||
self.lock = Lock()
|
||||
|
||||
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):
|
||||
prev_sz = self.prev_sprite_map_sizes[buf_id]
|
||||
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)
|
||||
self.prev_sprite_map_sizes[buf_id] = new_sz
|
||||
if False:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user