summaryrefslogtreecommitdiffstats
path: root/libdimension/gl.c
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2014-08-19 17:10:03 -0400
committerTavian Barnes <tavianator@tavianator.com>2015-10-25 11:03:56 -0400
commit7b09710392d35fb55b52031d447a542d99fc6b4b (patch)
tree270eb927ee8c52ceeb99926ebf4843704775a610 /libdimension/gl.c
parent200c86b91ea7063d35be3bffc11c5da53c054653 (diff)
downloaddimension-7b09710392d35fb55b52031d447a542d99fc6b4b.tar.xz
Modularize the libdimension codebase.
Diffstat (limited to 'libdimension/gl.c')
-rw-r--r--libdimension/gl.c111
1 files changed, 0 insertions, 111 deletions
diff --git a/libdimension/gl.c b/libdimension/gl.c
deleted file mode 100644
index 77099d2..0000000
--- a/libdimension/gl.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*************************************************************************
- * Copyright (C) 2009-2014 Tavian Barnes <tavianator@tavianator.com> *
- * *
- * This file is part of The Dimension Library. *
- * *
- * The Dimension Library is free software; you can redistribute it and/ *
- * or modify it under the terms of the GNU Lesser General Public License *
- * as published by the Free Software Foundation; either version 3 of the *
- * License, or (at your option) any later version. *
- * *
- * The Dimension Library is distributed in the hope that it will be *
- * useful, but WITHOUT ANY WARRANTY; without even the implied warranty *
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
- * Lesser General Public License for more details. *
- * *
- * You should have received a copy of the GNU Lesser General Public *
- * License along with this program. If not, see *
- * <http://www.gnu.org/licenses/>. *
- *************************************************************************/
-
-/**
- * @file
- * OpenGL import/export.
- */
-
-#include "dimension-internal.h"
-#include <GL/gl.h>
-#include <stdlib.h>
-#include <stdint.h>
-
-// Optimize canvas for GL drawing
-int
-dmnsn_gl_optimize_canvas(dmnsn_pool *pool, dmnsn_canvas *canvas)
-{
- dmnsn_rgba8_optimize_canvas(pool, canvas);
- return 0;
-}
-
-// Write canvas to GL framebuffer. Returns 0 on success, nonzero on failure
-int
-dmnsn_gl_write_canvas(const dmnsn_canvas *canvas)
-{
- size_t width = canvas->width;
- size_t height = canvas->height;
-
- // Check if we can optimize this
- dmnsn_rgba8_optimizer *rgba8 = (dmnsn_rgba8_optimizer *)dmnsn_canvas_find_optimizer(canvas, dmnsn_rgba8_optimizer_fn);
- if (rgba8) {
- glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, rgba8->data);
- return glGetError() == GL_NO_ERROR ? 0 : 1;
- }
-
- // We couldn't, so transform the canvas to RGB now
- 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) {
- 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_clamp(tcolor);
-
- 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_BYTE, pixels);
-
- dmnsn_free(pixels);
- return glGetError() == GL_NO_ERROR ? 0 : 1;
-}
-
-// Read a canvas from a GL framebuffer. Returns NULL on failure.
-int
-dmnsn_gl_read_canvas(dmnsn_canvas *canvas, size_t x0, size_t y0)
-{
- size_t width = canvas->width;
- size_t height = canvas->height;
-
- // Array of 16-bit ints in RGBA order
- GLushort *pixels = dmnsn_malloc(4*width*height*sizeof(GLushort));
- glReadPixels(x0, y0, width, height, GL_RGBA, GL_UNSIGNED_SHORT, pixels);
- if (glGetError() != GL_NO_ERROR) {
- dmnsn_free(pixels);
- return -1;
- }
-
- for (size_t y = 0; y < height; ++y) {
- for (size_t x = 0; x < width; ++x) {
- GLushort *pixel = pixels + 4*(y*width + x);
-
- dmnsn_tcolor tcolor = dmnsn_new_tcolor5(
- (double)pixel[0]/UINT16_MAX,
- (double)pixel[1]/UINT16_MAX,
- (double)pixel[2]/UINT16_MAX,
- (double)pixel[3]/UINT16_MAX,
- 0.0
- );
- tcolor.c = dmnsn_color_from_sRGB(tcolor.c);
- dmnsn_canvas_set_pixel(canvas, x, y, tcolor);
- }
- }
-
- dmnsn_free(pixels);
- return 0;
-}