diff options
| -rw-r--r-- | pugl/cairo_gl.h | 105 | ||||
| -rw-r--r-- | pugl/pugl.h | 5 | ||||
| -rw-r--r-- | pugl/pugl_x11.c | 36 | ||||
| -rw-r--r-- | pugl_cairo_test.c | 6 | 
4 files changed, 3 insertions, 149 deletions
diff --git a/pugl/cairo_gl.h b/pugl/cairo_gl.h deleted file mode 100644 index 5c0f1f9..0000000 --- a/pugl/cairo_gl.h +++ /dev/null @@ -1,105 +0,0 @@ -/* -  Copyright 2016 David Robillard <http://drobilla.net> - -  Permission to use, copy, modify, and/or distribute this software for any -  purpose with or without fee is hereby granted, provided that the above -  copyright notice and this permission notice appear in all copies. - -  THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -*/ - -#if defined(PUGL_HAVE_GL) && defined(PUGL_HAVE_CAIRO) - -#include <cairo/cairo.h> -#include <stdint.h> - -#include "pugl/gl.h" - -typedef struct { -	unsigned texture_id; -	uint8_t* buffer; -} PuglCairoGL; - -static cairo_surface_t* -pugl_cairo_gl_create(PuglCairoGL* ctx, int width, int height, int bpp) -{ -	free(ctx->buffer); -	ctx->buffer = (uint8_t*)calloc(bpp * width * height, sizeof(uint8_t)); -	if (!ctx->buffer) { -		fprintf(stderr, "failed to allocate surface buffer\n"); -		return NULL; -	} - -	return cairo_image_surface_create_for_data( -		ctx->buffer, CAIRO_FORMAT_ARGB32, width, height, bpp * width); -} - -static void -pugl_cairo_gl_free(PuglCairoGL* ctx) -{ -	free(ctx->buffer); -	ctx->buffer = NULL; -} - -static void -pugl_cairo_gl_configure(PuglCairoGL* ctx, int width, int height) -{ -	glDisable(GL_DEPTH_TEST); -	glEnable(GL_BLEND); -	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -	glEnable(GL_TEXTURE_RECTANGLE_ARB); - -	glMatrixMode(GL_PROJECTION); -	glLoadIdentity(); -	glOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f); - -	glClear(GL_COLOR_BUFFER_BIT); - -	glDeleteTextures(1, &ctx->texture_id); -	glGenTextures(1, &ctx->texture_id); -	glBindTexture(GL_TEXTURE_RECTANGLE_ARB, ctx->texture_id); -	glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); -} - -static void -pugl_cairo_gl_draw(PuglCairoGL* ctx, int width, int height) -{ -	glMatrixMode(GL_MODELVIEW); -	glLoadIdentity(); -	glViewport(0, 0, width, height); -	glClear(GL_COLOR_BUFFER_BIT); - -	glPushMatrix(); -	glEnable(GL_TEXTURE_RECTANGLE_ARB); -	glEnable(GL_TEXTURE_2D); - -	glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, -	             width, height, 0, -	             GL_BGRA, GL_UNSIGNED_BYTE, ctx->buffer); - -	glBegin(GL_QUADS); -	glTexCoord2f(0.0f, (GLfloat)height); -	glVertex2f(-1.0f, -1.0f); - -	glTexCoord2f((GLfloat)width, (GLfloat)height); -	glVertex2f(1.0f, -1.0f); - -	glTexCoord2f((GLfloat)width, 0.0f); -	glVertex2f(1.0f, 1.0f); - -	glTexCoord2f(0.0f, 0.0f); -	glVertex2f(-1.0f, 1.0f); -	glEnd(); - -	glDisable(GL_TEXTURE_2D); -	glDisable(GL_TEXTURE_RECTANGLE_ARB); -	glPopMatrix(); -} - -#endif diff --git a/pugl/pugl.h b/pugl/pugl.h index 1b22260..1cfe3c9 100644 --- a/pugl/pugl.h +++ b/pugl/pugl.h @@ -82,9 +82,8 @@ typedef enum {     Drawing context type.  */  typedef enum { -	PUGL_GL       = 0x1, -	PUGL_CAIRO    = 0x2, -	PUGL_CAIRO_GL = 0x3 +	PUGL_GL    = 0x1,  /**< OpenGL (3D) */ +	PUGL_CAIRO = 0x2   /**< Cairo (2D) */  } PuglContextType;  /** diff --git a/pugl/pugl_x11.c b/pugl/pugl_x11.c index ef08ac8..5acd797 100644 --- a/pugl/pugl_x11.c +++ b/pugl/pugl_x11.c @@ -39,7 +39,6 @@  #include <cairo/cairo.h>  #endif -#include "pugl/cairo_gl.h"  #include "pugl/pugl_internal.h"  #ifndef MIN @@ -97,9 +96,6 @@ struct PuglInternalsImpl {  	GLXContext       ctx;  	int              doubleBuffered;  #endif -#if defined(PUGL_HAVE_CAIRO) && defined(PUGL_HAVE_GL) -	PuglCairoGL      cairo_gl; -#endif  };  PuglInternals* @@ -165,12 +161,6 @@ createContext(PuglView* view, XVisualInfo* vi)  			impl->display, impl->win, vi->visual, view->width, view->height);  	}  #endif -#if defined(PUGL_HAVE_GL) && defined(PUGL_HAVE_CAIRO) -	if (view->ctx_type == PUGL_CAIRO_GL) { -		impl->surface = pugl_cairo_gl_create( -			&impl->cairo_gl, view->width, view->height, 4); -	} -#endif  #ifdef PUGL_HAVE_CAIRO  	if (view->ctx_type & PUGL_CAIRO) { @@ -193,11 +183,6 @@ createContext(PuglView* view, XVisualInfo* vi)  static void  destroyContext(PuglView* view)  { -#if defined(PUGL_HAVE_CAIRO) && defined(PUGL_HAVE_GL) -	if (view->ctx_type == PUGL_CAIRO_GL) { -		pugl_cairo_gl_free(&view->impl->cairo_gl); -	} -#endif  #ifdef PUGL_HAVE_GL  	if (view->ctx_type & PUGL_GL) {  		glXDestroyContext(view->impl->display, view->impl->ctx); @@ -226,12 +211,6 @@ puglLeaveContext(PuglView* view, bool flush)  {  #ifdef PUGL_HAVE_GL  	if (flush && view->ctx_type & PUGL_GL) { -#ifdef PUGL_HAVE_CAIRO -		if (view->ctx_type == PUGL_CAIRO_GL) { -			pugl_cairo_gl_draw(&view->impl->cairo_gl, view->width, view->height); -		} -#endif -  		glFlush();  		if (view->impl->doubleBuffered) {  			glXSwapBuffers(view->impl->display, view->impl->win); @@ -662,21 +641,6 @@ puglProcessEvents(PuglView* view)  			                            config_event.configure.width,  			                            config_event.configure.height);  		} -#ifdef PUGL_HAVE_GL -		if (view->ctx_type == PUGL_CAIRO_GL) { -			view->redisplay = true; -			cairo_surface_destroy(view->impl->surface); -			view->impl->surface = pugl_cairo_gl_create( -				&view->impl->cairo_gl, -				config_event.configure.width, -				config_event.configure.height, -				4); -			pugl_cairo_gl_configure(&view->impl->cairo_gl, -			                        config_event.configure.width, -			                        config_event.configure.height); -			createCairoContext(view); -		} -#endif  #endif  		puglDispatchEvent(view, (const PuglEvent*)&config_event);  	} diff --git a/pugl_cairo_test.c b/pugl_cairo_test.c index 76c3ee7..78abcfa 100644 --- a/pugl_cairo_test.c +++ b/pugl_cairo_test.c @@ -162,19 +162,15 @@ onEvent(PuglView* view, const PuglEvent* event)  int  main(int argc, char** argv)  { -	bool useGL           = false;  	bool ignoreKeyRepeat = false;  	bool resizable       = false;  	for (int i = 1; i < argc; ++i) {  		if (!strcmp(argv[i], "-h")) {  			printf("USAGE: %s [OPTIONS]...\n\n" -			       "  -g  Use OpenGL\n"  			       "  -h  Display this help\n"  			       "  -i  Ignore key repeat\n"  			       "  -r  Resizable window\n", argv[0]);  			return 0; -		} else if (!strcmp(argv[i], "-g")) { -			useGL = true;  		} else if (!strcmp(argv[i], "-i")) {  			ignoreKeyRepeat = true;  		} else if (!strcmp(argv[i], "-r")) { @@ -187,7 +183,7 @@ main(int argc, char** argv)  	PuglView* view = puglInit(NULL, NULL);  	puglInitWindowSize(view, 512, 512);  	puglInitResizable(view, resizable); -	puglInitContextType(view, useGL ? PUGL_CAIRO_GL : PUGL_CAIRO); +	puglInitContextType(view, PUGL_CAIRO);  	puglIgnoreKeyRepeat(view, ignoreKeyRepeat);  	puglSetEventFunc(view, onEvent);  | 
