mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-04-03 06:50:41 +02:00
[gl] Make the VBO once at startup instead of recreating per glyphs/spans.
This shaves 2% off of firefox-talos-gfx.
This commit is contained in:
parent
696a715702
commit
b028d287e6
3 changed files with 6 additions and 13 deletions
|
|
@ -457,7 +457,6 @@ _render_glyphs (cairo_gl_surface_t *dst,
|
|||
cairo_gl_composite_setup_t composite_setup;
|
||||
cairo_status_t status;
|
||||
int i = 0;
|
||||
GLuint vbo = 0;
|
||||
|
||||
*has_component_alpha = FALSE;
|
||||
|
||||
|
|
@ -505,8 +504,7 @@ _render_glyphs (cairo_gl_surface_t *dst,
|
|||
setup.op = op;
|
||||
setup.in = CAIRO_GL_SHADER_IN_COUNT; /* unset */
|
||||
|
||||
glGenBuffersARB (1, &vbo);
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, vbo);
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, ctx->vbo);
|
||||
|
||||
glVertexPointer (2, GL_FLOAT, setup.vertex_size * sizeof (GLfloat),
|
||||
(void *)(uintptr_t)(0));
|
||||
|
|
@ -622,11 +620,7 @@ _render_glyphs (cairo_gl_surface_t *dst,
|
|||
glDisable (GL_TEXTURE_2D);
|
||||
_cairo_gl_use_program (NULL);
|
||||
|
||||
if (vbo != 0) {
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, 0);
|
||||
glDeleteBuffersARB (1, &vbo);
|
||||
}
|
||||
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, 0);
|
||||
_cairo_gl_context_release (ctx);
|
||||
|
||||
_cairo_gl_operand_destroy (&composite_setup.src);
|
||||
|
|
|
|||
|
|
@ -119,6 +119,7 @@ typedef struct _cairo_gl_context {
|
|||
|
||||
GLuint dummy_tex;
|
||||
GLuint texture_load_pbo;
|
||||
GLuint vbo;
|
||||
GLint max_framebuffer_size;
|
||||
GLint max_texture_size;
|
||||
cairo_bool_t using_glsl;
|
||||
|
|
|
|||
|
|
@ -139,6 +139,7 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
|
|||
|
||||
/* PBO for any sort of texture upload */
|
||||
glGenBuffersARB (1, &ctx->texture_load_pbo);
|
||||
glGenBuffersARB (1, &ctx->vbo);
|
||||
|
||||
ctx->max_framebuffer_size = 0;
|
||||
glGetIntegerv (GL_MAX_RENDERBUFFER_SIZE, &ctx->max_framebuffer_size);
|
||||
|
|
@ -2481,7 +2482,6 @@ typedef struct _cairo_gl_surface_span_renderer {
|
|||
cairo_gl_context_t *ctx;
|
||||
cairo_region_t *clip;
|
||||
|
||||
GLuint vbo;
|
||||
void *vbo_base;
|
||||
unsigned int vbo_size;
|
||||
unsigned int vbo_offset;
|
||||
|
|
@ -2525,10 +2525,9 @@ _cairo_gl_span_renderer_get_vbo (cairo_gl_surface_span_renderer_t *renderer,
|
|||
{
|
||||
unsigned int offset;
|
||||
|
||||
if (renderer->vbo == 0) {
|
||||
if (renderer->vbo_size == 0) {
|
||||
renderer->vbo_size = 16384;
|
||||
glGenBuffersARB (1, &renderer->vbo);
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, renderer->vbo);
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, renderer->ctx->vbo);
|
||||
|
||||
if (renderer->setup.src.type == OPERAND_TEXTURE)
|
||||
renderer->vertex_size = 4 * sizeof (float) + sizeof (uint32_t);
|
||||
|
|
@ -2701,7 +2700,6 @@ _cairo_gl_surface_span_renderer_finish (void *abstract_renderer)
|
|||
_cairo_gl_span_renderer_flush (renderer);
|
||||
|
||||
glBindBufferARB (GL_ARRAY_BUFFER_ARB, 0);
|
||||
glDeleteBuffersARB (1, &renderer->vbo);
|
||||
glDisableClientState (GL_VERTEX_ARRAY);
|
||||
glDisableClientState (GL_COLOR_ARRAY);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue