From 12eeb9524aa9421c03f253ab6161634bec66793b Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sun, 27 Apr 2014 14:00:33 -0400 Subject: gl: Make drawing faster by using a better pixel format. --- libdimension/gl.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'libdimension/gl.c') diff --git a/libdimension/gl.c b/libdimension/gl.c index e2d222c..0b6b0b0 100644 --- a/libdimension/gl.c +++ b/libdimension/gl.c @@ -32,7 +32,7 @@ int dmnsn_gl_optimize_canvas(dmnsn_canvas *canvas) { - dmnsn_rgba16_optimize_canvas(canvas); + dmnsn_rgba8_optimize_canvas(canvas); return 0; } @@ -44,33 +44,33 @@ dmnsn_gl_write_canvas(const dmnsn_canvas *canvas) size_t height = canvas->height; /* Check if we can optimize this */ - DMNSN_ARRAY_FOREACH (dmnsn_canvas_optimizer *, i, canvas->optimizers) { - if (i->optimizer_fn == dmnsn_rgba16_optimizer_fn) { - glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_SHORT, i->ptr); - return glGetError() == GL_NO_ERROR ? 0 : 1; - } + dmnsn_canvas_optimizer *optimizer = + dmnsn_canvas_find_optimizer(canvas, dmnsn_rgba8_optimizer_fn); + if (optimizer) { + glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, optimizer->ptr); + return glGetError() == GL_NO_ERROR ? 0 : 1; } /* We couldn't, so transform the canvas to RGB now */ - GLushort *pixels = dmnsn_malloc(4*width*height*sizeof(GLushort)); + GLubyte *pixels = dmnsn_malloc(4*width*height*sizeof(GLubyte)); for (size_t y = 0; y < height; ++y) { for (size_t x = 0; x < width; ++x) { - GLushort *pixel = pixels + 4*(y*width + x); + GLubyte *pixel = pixels + 4*(y*width + x); dmnsn_tcolor tcolor = dmnsn_canvas_get_pixel(canvas, x, y); tcolor = dmnsn_tcolor_remove_filter(tcolor); tcolor.c = dmnsn_color_to_sRGB(tcolor.c); tcolor = dmnsn_tcolor_saturate(tcolor); - pixel[0] = lround(tcolor.c.R*UINT16_MAX); - pixel[1] = lround(tcolor.c.G*UINT16_MAX); - pixel[2] = lround(tcolor.c.B*UINT16_MAX); - pixel[3] = lround(tcolor.T*UINT16_MAX); + pixel[0] = lround(tcolor.c.R*UINT8_MAX); + pixel[1] = lround(tcolor.c.G*UINT8_MAX); + pixel[2] = lround(tcolor.c.B*UINT8_MAX); + pixel[3] = lround(tcolor.T*UINT8_MAX); } } - glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_SHORT, pixels); + glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); dmnsn_free(pixels); return glGetError() == GL_NO_ERROR ? 0 : 1; -- cgit v1.2.3