mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
gl driver: Remove vao API
Unused.
This commit is contained in:
parent
825608af2a
commit
352590cf9f
@ -21,17 +21,6 @@ typedef struct {
|
||||
guint permanent : 1;
|
||||
} Texture;
|
||||
|
||||
typedef struct {
|
||||
GLuint vao_id;
|
||||
GLuint buffer_id;
|
||||
GLuint position_id;
|
||||
GLuint uv_id;
|
||||
GskQuadVertex *quads;
|
||||
int n_quads;
|
||||
guint in_use : 1;
|
||||
guint permanent : 1;
|
||||
} Vao;
|
||||
|
||||
typedef struct {
|
||||
GLuint fbo_id;
|
||||
GLuint depth_stencil_id;
|
||||
@ -52,11 +41,9 @@ struct _GskGLDriver
|
||||
Fbo default_fbo;
|
||||
|
||||
GHashTable *textures;
|
||||
GHashTable *vaos;
|
||||
|
||||
const Texture *bound_source_texture;
|
||||
const Texture *bound_mask_texture;
|
||||
const Vao *bound_vao;
|
||||
const Fbo *bound_fbo;
|
||||
|
||||
int max_texture_size;
|
||||
@ -105,23 +92,6 @@ fbo_clear (gpointer data)
|
||||
glDeleteFramebuffers (1, &f->fbo_id);
|
||||
}
|
||||
|
||||
static Vao *
|
||||
vao_new (void)
|
||||
{
|
||||
return g_slice_new0 (Vao);
|
||||
}
|
||||
|
||||
static void
|
||||
vao_free (gpointer data)
|
||||
{
|
||||
Vao *v = data;
|
||||
|
||||
g_free (v->quads);
|
||||
glDeleteBuffers (1, &v->buffer_id);
|
||||
glDeleteVertexArrays (1, &v->vao_id);
|
||||
g_slice_free (Vao, v);
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_gl_driver_finalize (GObject *gobject)
|
||||
{
|
||||
@ -130,7 +100,6 @@ gsk_gl_driver_finalize (GObject *gobject)
|
||||
gdk_gl_context_make_current (self->gl_context);
|
||||
|
||||
g_clear_pointer (&self->textures, g_hash_table_unref);
|
||||
g_clear_pointer (&self->vaos, g_hash_table_unref);
|
||||
g_clear_object (&self->profiler);
|
||||
|
||||
if (self->gl_context == gdk_gl_context_get_current ())
|
||||
@ -200,7 +169,6 @@ static void
|
||||
gsk_gl_driver_init (GskGLDriver *self)
|
||||
{
|
||||
self->textures = g_hash_table_new_full (NULL, NULL, NULL, texture_free);
|
||||
self->vaos = g_hash_table_new_full (NULL, NULL, NULL, vao_free);
|
||||
|
||||
self->max_texture_size = -1;
|
||||
|
||||
@ -270,7 +238,6 @@ gsk_gl_driver_end_frame (GskGLDriver *self)
|
||||
|
||||
self->bound_source_texture = NULL;
|
||||
self->bound_mask_texture = NULL;
|
||||
self->bound_vao = NULL;
|
||||
self->bound_fbo = NULL;
|
||||
|
||||
self->default_fbo.fbo_id = 0;
|
||||
@ -283,9 +250,8 @@ gsk_gl_driver_end_frame (GskGLDriver *self)
|
||||
gsk_profiler_counter_get (self->profiler, self->counters.reused_textures),
|
||||
gsk_profiler_counter_get (self->profiler, self->counters.surface_uploads)));
|
||||
GSK_NOTE (OPENGL,
|
||||
g_print ("*** Frame end: textures=%d, vaos=%d\n",
|
||||
g_hash_table_size (self->textures),
|
||||
g_hash_table_size (self->vaos)));
|
||||
g_print ("*** Frame end: textures=%d\n",
|
||||
g_hash_table_size (self->textures)));
|
||||
|
||||
self->in_frame = FALSE;
|
||||
}
|
||||
@ -323,32 +289,6 @@ gsk_gl_driver_collect_textures (GskGLDriver *driver)
|
||||
return old_size - g_hash_table_size (driver->textures);
|
||||
}
|
||||
|
||||
int
|
||||
gsk_gl_driver_collect_vaos (GskGLDriver *driver)
|
||||
{
|
||||
GHashTableIter iter;
|
||||
gpointer value_p = NULL;
|
||||
int old_size;
|
||||
|
||||
g_return_val_if_fail (GSK_IS_GL_DRIVER (driver), 0);
|
||||
g_return_val_if_fail (!driver->in_frame, 0);
|
||||
|
||||
old_size = g_hash_table_size (driver->vaos);
|
||||
|
||||
g_hash_table_iter_init (&iter, driver->vaos);
|
||||
while (g_hash_table_iter_next (&iter, NULL, &value_p))
|
||||
{
|
||||
Vao *v = value_p;
|
||||
|
||||
if (v->in_use)
|
||||
v->in_use = FALSE;
|
||||
else
|
||||
g_hash_table_iter_remove (&iter);
|
||||
}
|
||||
|
||||
return old_size - g_hash_table_size (driver->vaos);
|
||||
}
|
||||
|
||||
int
|
||||
gsk_gl_driver_get_max_texture_size (GskGLDriver *driver)
|
||||
{
|
||||
@ -375,18 +315,6 @@ gsk_gl_driver_get_texture (GskGLDriver *driver,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static Vao *
|
||||
gsk_gl_driver_get_vao (GskGLDriver *driver,
|
||||
int vao_id)
|
||||
{
|
||||
Vao *v;
|
||||
|
||||
if (g_hash_table_lookup_extended (driver->vaos, GINT_TO_POINTER (vao_id), NULL, (gpointer *) &v))
|
||||
return v;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static Fbo *
|
||||
gsk_gl_driver_get_fbo (GskGLDriver *driver,
|
||||
int texture_id)
|
||||
@ -542,133 +470,6 @@ gsk_gl_driver_create_texture (GskGLDriver *driver,
|
||||
return t->texture_id;
|
||||
}
|
||||
|
||||
static Vao *
|
||||
find_vao (GHashTable *vaos,
|
||||
int position_id,
|
||||
int uv_id,
|
||||
int n_quads,
|
||||
GskQuadVertex *quads)
|
||||
{
|
||||
GHashTableIter iter;
|
||||
gpointer value_p = NULL;
|
||||
|
||||
g_hash_table_iter_init (&iter, vaos);
|
||||
while (g_hash_table_iter_next (&iter, NULL, &value_p))
|
||||
{
|
||||
Vao *v = value_p;
|
||||
|
||||
if (v->position_id != position_id || v->uv_id != uv_id)
|
||||
continue;
|
||||
|
||||
if (v->n_quads != n_quads)
|
||||
continue;
|
||||
|
||||
if (memcmp (v->quads, quads, sizeof (GskQuadVertex) * n_quads) == 0)
|
||||
return v;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
gsk_gl_driver_create_permanent_vao_for_quad (GskGLDriver *driver,
|
||||
int n_vertices,
|
||||
const GskQuadVertex *quads,
|
||||
int *out_vao_id,
|
||||
int *out_vao_buffer_id)
|
||||
{
|
||||
GLuint vao_id, buffer_id;
|
||||
|
||||
glGenVertexArrays (1, &vao_id);
|
||||
glBindVertexArray (vao_id);
|
||||
|
||||
glGenBuffers (1, &buffer_id);
|
||||
glBindBuffer (GL_ARRAY_BUFFER, buffer_id);
|
||||
glBufferData (GL_ARRAY_BUFFER, sizeof (GskQuadVertex) * n_vertices, quads, GL_STATIC_DRAW);
|
||||
|
||||
glBindBuffer (GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray (0);
|
||||
|
||||
*out_vao_id = buffer_id;
|
||||
*out_vao_buffer_id = vao_id;
|
||||
}
|
||||
|
||||
int
|
||||
gsk_gl_driver_create_vao_for_quad (GskGLDriver *driver,
|
||||
int position_id,
|
||||
int uv_id,
|
||||
int n_vertices,
|
||||
GskQuadVertex *quads)
|
||||
|
||||
{
|
||||
GLuint vao_id, buffer_id;
|
||||
Vao *v;
|
||||
|
||||
g_return_val_if_fail (GSK_IS_GL_DRIVER (driver), -1);
|
||||
g_return_val_if_fail (driver->in_frame, -1);
|
||||
|
||||
v = find_vao (driver->vaos, position_id, uv_id, n_vertices, quads);
|
||||
if (v != NULL && !v->in_use)
|
||||
{
|
||||
GSK_NOTE (OPENGL, g_print ("Reusing VAO(%d)\n", v->vao_id));
|
||||
v->in_use = TRUE;
|
||||
return v->vao_id;
|
||||
}
|
||||
|
||||
glGenVertexArrays (1, &vao_id);
|
||||
glBindVertexArray (vao_id);
|
||||
|
||||
glGenBuffers (1, &buffer_id);
|
||||
glBindBuffer (GL_ARRAY_BUFFER, buffer_id);
|
||||
glBufferData (GL_ARRAY_BUFFER, sizeof (GskQuadVertex) * n_vertices, quads, GL_STATIC_DRAW);
|
||||
|
||||
if (position_id != -1)
|
||||
{
|
||||
glEnableVertexAttribArray (position_id);
|
||||
glVertexAttribPointer (position_id, 2, GL_FLOAT, GL_FALSE,
|
||||
sizeof (GskQuadVertex),
|
||||
(void *) G_STRUCT_OFFSET (GskQuadVertex, position));
|
||||
}
|
||||
|
||||
if (uv_id != -1)
|
||||
{
|
||||
glEnableVertexAttribArray (uv_id);
|
||||
glVertexAttribPointer (uv_id, 2, GL_FLOAT, GL_FALSE,
|
||||
sizeof (GskQuadVertex),
|
||||
(void *) G_STRUCT_OFFSET (GskQuadVertex, uv));
|
||||
}
|
||||
|
||||
glBindBuffer (GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray (0);
|
||||
|
||||
v = vao_new ();
|
||||
v->vao_id = vao_id;
|
||||
v->buffer_id = buffer_id;
|
||||
v->position_id = position_id;
|
||||
v->uv_id = uv_id;
|
||||
v->n_quads = n_vertices;
|
||||
v->quads = g_memdup (quads, sizeof (GskQuadVertex) * n_vertices);
|
||||
v->in_use = TRUE;
|
||||
g_hash_table_insert (driver->vaos, GINT_TO_POINTER (vao_id), v);
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (GSK_DEBUG_CHECK (OPENGL))
|
||||
{
|
||||
int i;
|
||||
g_print ("New VAO(%d) for quad[%d] : {\n", v->vao_id, n_vertices);
|
||||
for (i = 0; i < n_vertices; i++)
|
||||
{
|
||||
g_print (" { x:%.2f, y:%.2f } { u:%.2f, v:%.2f }\n",
|
||||
quads[i].position[0], quads[i].position[1],
|
||||
quads[i].uv[0], quads[i].uv[1]);
|
||||
}
|
||||
g_print ("}\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
return vao_id;
|
||||
}
|
||||
|
||||
int
|
||||
gsk_gl_driver_create_render_target (GskGLDriver *driver,
|
||||
int texture_id,
|
||||
@ -782,37 +583,6 @@ gsk_gl_driver_bind_mask_texture (GskGLDriver *driver,
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gsk_gl_driver_bind_vao (GskGLDriver *driver,
|
||||
int vao_id)
|
||||
{
|
||||
Vao *v;
|
||||
|
||||
g_return_if_fail (GSK_IS_GL_DRIVER (driver));
|
||||
g_return_if_fail (driver->in_frame);
|
||||
|
||||
v = gsk_gl_driver_get_vao (driver, vao_id);
|
||||
if (v == NULL)
|
||||
{
|
||||
g_critical ("No VAO %d found.", vao_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (driver->bound_vao != v)
|
||||
{
|
||||
glBindVertexArray (v->vao_id);
|
||||
glBindBuffer (GL_ARRAY_BUFFER, v->buffer_id);
|
||||
|
||||
if (v->position_id != -1)
|
||||
glEnableVertexAttribArray (v->position_id);
|
||||
|
||||
if (v->uv_id != -1)
|
||||
glEnableVertexAttribArray (v->uv_id);
|
||||
|
||||
driver->bound_vao = v;
|
||||
}
|
||||
}
|
||||
|
||||
gboolean
|
||||
gsk_gl_driver_bind_render_target (GskGLDriver *driver,
|
||||
int texture_id)
|
||||
@ -864,15 +634,6 @@ gsk_gl_driver_destroy_texture (GskGLDriver *driver,
|
||||
g_hash_table_remove (driver->textures, GINT_TO_POINTER (texture_id));
|
||||
}
|
||||
|
||||
void
|
||||
gsk_gl_driver_destroy_vao (GskGLDriver *driver,
|
||||
int vao_id)
|
||||
{
|
||||
g_return_if_fail (GSK_IS_GL_DRIVER (driver));
|
||||
|
||||
g_hash_table_remove (driver->vaos, GINT_TO_POINTER (vao_id));
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_gl_driver_set_texture_parameters (GskGLDriver *driver,
|
||||
int min_filter,
|
||||
|
@ -33,16 +33,6 @@ int gsk_gl_driver_create_permanent_texture (GskGLDriver *driver
|
||||
int gsk_gl_driver_create_texture (GskGLDriver *driver,
|
||||
float width,
|
||||
float height);
|
||||
int gsk_gl_driver_create_vao_for_quad (GskGLDriver *driver,
|
||||
int position_id,
|
||||
int uv_id,
|
||||
int n_vertices,
|
||||
GskQuadVertex *vertices);
|
||||
void gsk_gl_driver_create_permanent_vao_for_quad (GskGLDriver *driver,
|
||||
int n_vertices,
|
||||
const GskQuadVertex *quads,
|
||||
int *out_vao_id,
|
||||
int *out_vao_buffer_id);
|
||||
int gsk_gl_driver_create_render_target (GskGLDriver *driver,
|
||||
int texture_id,
|
||||
gboolean add_depth_buffer,
|
||||
@ -52,8 +42,6 @@ void gsk_gl_driver_bind_source_texture (GskGLDriver *driver
|
||||
int texture_id);
|
||||
void gsk_gl_driver_bind_mask_texture (GskGLDriver *driver,
|
||||
int texture_id);
|
||||
void gsk_gl_driver_bind_vao (GskGLDriver *driver,
|
||||
int vao_id);
|
||||
gboolean gsk_gl_driver_bind_render_target (GskGLDriver *driver,
|
||||
int texture_id);
|
||||
|
||||
@ -67,11 +55,8 @@ void gsk_gl_driver_init_texture_with_surface (GskGLDriver *driver
|
||||
|
||||
void gsk_gl_driver_destroy_texture (GskGLDriver *driver,
|
||||
int texture_id);
|
||||
void gsk_gl_driver_destroy_vao (GskGLDriver *driver,
|
||||
int vao_id);
|
||||
|
||||
int gsk_gl_driver_collect_textures (GskGLDriver *driver);
|
||||
int gsk_gl_driver_collect_vaos (GskGLDriver *driver);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user