mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-04 03:38:06 +02:00
gl: Replace GLEW by using the facilities provided by cairo-gl-info
This commit is contained in:
parent
6373db8441
commit
7cf9893546
5 changed files with 34 additions and 51 deletions
|
|
@ -3,6 +3,7 @@
|
|||
* Copyright © 2009 Eric Anholt
|
||||
* Copyright © 2009 Chris Wilson
|
||||
* Copyright © 2005,2010 Red Hat, Inc
|
||||
* Copyright © 2010 Linaro Limited
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it either under the terms of the GNU Lesser General Public
|
||||
|
|
@ -36,6 +37,7 @@
|
|||
* Carl Worth <cworth@cworth.org>
|
||||
* Chris Wilson <chris@chris-wilson.co.uk>
|
||||
* Eric Anholt <eric@anholt.net>
|
||||
* Alexandros Frantzis <alexandros.frantzis@linaro.org>
|
||||
*/
|
||||
|
||||
#include "cairoint.h"
|
||||
|
|
@ -153,6 +155,7 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
|
|||
{
|
||||
cairo_status_t status;
|
||||
cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
|
||||
int gl_version = _cairo_gl_get_version ();
|
||||
int n;
|
||||
|
||||
_cairo_device_init (&ctx->base, &_cairo_gl_device_backend);
|
||||
|
|
@ -160,43 +163,24 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
|
|||
memset (ctx->glyph_cache, 0, sizeof (ctx->glyph_cache));
|
||||
cairo_list_init (&ctx->fonts);
|
||||
|
||||
if (glewInit () != GLEW_OK)
|
||||
return _cairo_error (CAIRO_STATUS_INVALID_FORMAT); /* XXX */
|
||||
/* Support only GL version >= 1.3 */
|
||||
if (gl_version < CAIRO_GL_VERSION_ENCODE (1, 3))
|
||||
return _cairo_error (CAIRO_STATUS_DEVICE_ERROR);
|
||||
|
||||
if (! GLEW_EXT_framebuffer_object ||
|
||||
! GLEW_ARB_texture_env_combine ||
|
||||
! GLEW_EXT_bgra)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Required GL extensions not available:\n");
|
||||
if (! GLEW_EXT_framebuffer_object)
|
||||
fprintf (stderr, " GL_EXT_framebuffer_object\n");
|
||||
if (! GLEW_ARB_texture_env_combine)
|
||||
fprintf (stderr, " GL_ARB_texture_env_combine\n");
|
||||
if (! GLEW_ARB_vertex_buffer_object)
|
||||
fprintf (stderr, " GL_ARB_vertex_buffer_object\n");
|
||||
|
||||
/* EXT_bgra is used in two places:
|
||||
* - draw_image to upload common pixman formats without hand-swizzling.
|
||||
* - get_image to download common pixman formats without hand-swizzling.
|
||||
*/
|
||||
if (! GLEW_EXT_bgra)
|
||||
fprintf (stderr, " GL_EXT_bgra\n");
|
||||
|
||||
return _cairo_error (CAIRO_STATUS_INVALID_FORMAT); /* XXX */
|
||||
}
|
||||
|
||||
if (! GLEW_ARB_texture_non_power_of_two &&
|
||||
! GLEW_ARB_texture_rectangle ) {
|
||||
fprintf (stderr,
|
||||
"Required GL extensions not available:\n");
|
||||
fprintf (stderr, " GL_ARB_texture_non_power_of_two, GL_ARB_texture_rectangle\n");
|
||||
}
|
||||
|
||||
if (! GLEW_ARB_texture_non_power_of_two)
|
||||
/* Check for required extensions */
|
||||
if (_cairo_gl_has_extension ("GL_ARB_texture_non_power_of_two"))
|
||||
ctx->tex_target = GL_TEXTURE_2D;
|
||||
else if (_cairo_gl_has_extension ("GL_ARB_texture_rectangle"))
|
||||
ctx->tex_target = GL_TEXTURE_RECTANGLE;
|
||||
else
|
||||
ctx->tex_target = GL_TEXTURE_2D;
|
||||
return _cairo_error (CAIRO_STATUS_DEVICE_ERROR);
|
||||
|
||||
if (gl_version < CAIRO_GL_VERSION_ENCODE (2, 1) &&
|
||||
! _cairo_gl_has_extension ("GL_ARB_pixel_buffer_object"))
|
||||
return _cairo_error (CAIRO_STATUS_DEVICE_ERROR);
|
||||
|
||||
ctx->has_mesa_pack_invert =
|
||||
_cairo_gl_has_extension ("GL_MESA_pack_invert");
|
||||
|
||||
ctx->current_operator = -1;
|
||||
|
||||
|
|
|
|||
|
|
@ -41,17 +41,16 @@
|
|||
#ifndef CAIRO_GL_GRADIENT_PRIVATE_H
|
||||
#define CAIRO_GL_GRADIENT_PRIVATE_H
|
||||
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
|
||||
#include "cairo-cache-private.h"
|
||||
#include "cairo-device-private.h"
|
||||
#include "cairo-reference-count-private.h"
|
||||
#include "cairo-types-private.h"
|
||||
|
||||
#include <GL/glew.h>
|
||||
|
||||
#include "cairo-gl.h"
|
||||
|
||||
#include <GL/gl.h>
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#include <GL/glext.h>
|
||||
|
||||
#define CAIRO_GL_GRADIENT_CACHE_SIZE 4096
|
||||
|
|
|
|||
|
|
@ -42,6 +42,8 @@
|
|||
#ifndef CAIRO_GL_PRIVATE_H
|
||||
#define CAIRO_GL_PRIVATE_H
|
||||
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
|
||||
#include "cairoint.h"
|
||||
|
||||
#include "cairo-gl-gradient-private.h"
|
||||
|
|
@ -52,12 +54,9 @@
|
|||
|
||||
#include <assert.h>
|
||||
|
||||
#include <GL/glew.h>
|
||||
|
||||
#include "cairo-gl.h"
|
||||
|
||||
#include <GL/gl.h>
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#include <GL/glext.h>
|
||||
#include "cairo-gl-ext-def-private.h"
|
||||
|
||||
|
|
@ -263,6 +262,7 @@ struct _cairo_gl_context {
|
|||
unsigned int vertex_size;
|
||||
cairo_region_t *clip_region;
|
||||
|
||||
cairo_bool_t has_mesa_pack_invert;
|
||||
cairo_gl_dispatch_t dispatch;
|
||||
|
||||
void (*acquire) (void *ctx);
|
||||
|
|
|
|||
|
|
@ -355,15 +355,13 @@ _cairo_gl_context_init_shaders (cairo_gl_context_t *ctx)
|
|||
"}\n";
|
||||
cairo_status_t status;
|
||||
|
||||
/* XXX multiple device support? */
|
||||
if (GLEW_VERSION_2_0 ||
|
||||
(GLEW_ARB_shader_objects &&
|
||||
GLEW_ARB_fragment_shader &&
|
||||
GLEW_ARB_vertex_program)) {
|
||||
ctx->shader_impl = &shader_impl_core_2_0;
|
||||
} else {
|
||||
ctx->shader_impl = NULL;
|
||||
}
|
||||
if (_cairo_gl_get_version () >= CAIRO_GL_VERSION_ENCODE (2, 0) ||
|
||||
(_cairo_gl_has_extension ("GL_ARB_shader_objects") &&
|
||||
_cairo_gl_has_extension ("GL_ARB_fragment_shader") &&
|
||||
_cairo_gl_has_extension ("GL_ARB_vertex_shader")))
|
||||
ctx->shader_impl = &shader_impl_core_2_0;
|
||||
else
|
||||
ctx->shader_impl = NULL;
|
||||
|
||||
memset (ctx->vertex_shaders, 0, sizeof (ctx->vertex_shaders));
|
||||
|
||||
|
|
|
|||
|
|
@ -743,12 +743,14 @@ _cairo_gl_surface_get_image (cairo_gl_surface_t *surface,
|
|||
|
||||
glPixelStorei (GL_PACK_ALIGNMENT, 1);
|
||||
glPixelStorei (GL_PACK_ROW_LENGTH, image->stride / cpp);
|
||||
if (! _cairo_gl_surface_is_texture (surface) && GLEW_MESA_pack_invert)
|
||||
if (! _cairo_gl_surface_is_texture (surface) &&
|
||||
ctx->has_mesa_pack_invert)
|
||||
glPixelStorei (GL_PACK_INVERT_MESA, 1);
|
||||
glReadPixels (interest->x, interest->y,
|
||||
interest->width, interest->height,
|
||||
format, type, image->data);
|
||||
if (! _cairo_gl_surface_is_texture (surface) && GLEW_MESA_pack_invert)
|
||||
if (! _cairo_gl_surface_is_texture (surface) &&
|
||||
ctx->has_mesa_pack_invert)
|
||||
glPixelStorei (GL_PACK_INVERT_MESA, 0);
|
||||
|
||||
status = _cairo_gl_context_release (ctx, status);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue