forked from enlightenment/efl
980 lines
44 KiB
C
980 lines
44 KiB
C
#ifndef EVAS_GL_COMMON_H
|
|
#define EVAS_GL_COMMON_H
|
|
|
|
#include "evas_common_private.h"
|
|
#include "evas_private.h"
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <math.h>
|
|
#include <sys/time.h>
|
|
#include <unistd.h>
|
|
#include <Eet.h>
|
|
|
|
#define GL_GLEXT_PROTOTYPES
|
|
|
|
#if !defined(HAVE_ECORE_X_XLIB) && !defined(MESA_EGL_NO_X11_HEADERS)
|
|
# define MESA_EGL_NO_X11_HEADERS
|
|
#endif
|
|
|
|
#ifndef EVAS_GL_NO_HEADERS
|
|
|
|
#ifdef BUILD_ENGINE_GL_COCOA
|
|
# include <OpenGL/gl.h>
|
|
# include <OpenGL/glext.h>
|
|
#else
|
|
# ifdef _EVAS_ENGINE_SDL_H
|
|
# ifdef GL_GLES
|
|
# include <SDL2/SDL_opengles.h>
|
|
# else
|
|
# include <SDL2/SDL_opengl.h>
|
|
# endif
|
|
# else
|
|
# ifdef GL_GLES
|
|
# include <EGL/egl.h>
|
|
# include <GLES2/gl2.h>
|
|
# include <GLES2/gl2ext.h>
|
|
# else
|
|
# include <GL/gl.h>
|
|
# include <GL/glext.h>
|
|
# endif
|
|
# endif
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#include "evas_gl_define.h"
|
|
|
|
#define EVAS_GL_TILE_SIZE 16
|
|
|
|
#define SHAD_VERTEX 0
|
|
#define SHAD_COLOR 1
|
|
#define SHAD_TEXUV 2
|
|
#define SHAD_TEXUV2 3
|
|
#define SHAD_TEXUV3 4
|
|
#define SHAD_TEXA 5
|
|
#define SHAD_TEXSAM 6
|
|
#define SHAD_MASK 7
|
|
#define SHAD_MASKSAM 8
|
|
|
|
typedef struct _Evas_GL_Program Evas_GL_Program;
|
|
typedef struct _Evas_GL_Shared Evas_GL_Shared;
|
|
typedef struct _Evas_Engine_GL_Context Evas_Engine_GL_Context;
|
|
typedef struct _Evas_GL_Texture_Pool Evas_GL_Texture_Pool;
|
|
typedef struct _Evas_GL_Texture_Alloca Evas_GL_Texture_Alloca;
|
|
typedef struct _Evas_GL_Texture Evas_GL_Texture;
|
|
typedef struct _Evas_GL_Image Evas_GL_Image;
|
|
typedef struct _Evas_GL_Font_Texture Evas_GL_Font_Texture;
|
|
typedef struct _Evas_GL_Polygon Evas_GL_Polygon;
|
|
typedef struct _Evas_GL_Polygon_Point Evas_GL_Polygon_Point;
|
|
typedef struct _Evas_GL_Texture_Async_Preload Evas_GL_Texture_Async_Preload;
|
|
typedef struct _Evas_GL_Image_Data_Map Evas_GL_Image_Data_Map;
|
|
typedef struct _Evas_GL_Filter Evas_GL_Filter;
|
|
|
|
typedef Eina_Bool (*evas_gl_make_current_cb)(void *engine_data, void *doit);
|
|
|
|
#ifdef EAPI
|
|
# undef EAPI
|
|
#endif
|
|
|
|
#ifdef _WIN32
|
|
# ifdef EFL_EVAS_BUILD
|
|
# ifdef DLL_EXPORT
|
|
# define EAPI __declspec(dllexport)
|
|
# else
|
|
# define EAPI
|
|
# endif /* ! DLL_EXPORT */
|
|
# else
|
|
# define EAPI __declspec(dllimport)
|
|
# endif /* ! EFL_EVAS_BUILD */
|
|
#else
|
|
# ifdef __GNUC__
|
|
# if __GNUC__ >= 4
|
|
# define EAPI __attribute__ ((visibility("default")))
|
|
# else
|
|
# define EAPI
|
|
# endif
|
|
# else
|
|
# define EAPI
|
|
# endif
|
|
#endif /* ! _WIN32 */
|
|
|
|
#define PROGRAM_HITCOUNT_MAX 0x1000000
|
|
|
|
struct _Evas_GL_Filter
|
|
{
|
|
struct {
|
|
GLint loc[3];
|
|
Eina_Bool known_locations;
|
|
} attribute;
|
|
struct {
|
|
GLint blur_count_loc;
|
|
GLint blur_count_value;
|
|
GLint blur_texlen_loc;
|
|
GLfloat blur_texlen_value;
|
|
GLint blur_div_loc;
|
|
GLfloat blur_div_value;
|
|
Eina_Bool known_locations;
|
|
} uniform;
|
|
struct {
|
|
GLuint tex_ids[1];
|
|
} texture;
|
|
double blur_radius;
|
|
};
|
|
|
|
struct _Evas_GL_Program
|
|
{
|
|
unsigned int flags, hitcount, tex_count;
|
|
struct {
|
|
GLuint mvp, rotation_id;
|
|
} uniform;
|
|
Evas_GL_Filter *filter;
|
|
GLuint prog;
|
|
|
|
Eina_Bool reset : 1;
|
|
Eina_Bool bin_saved : 1;
|
|
Eina_Bool delete_me : 1;
|
|
};
|
|
|
|
struct _Evas_GL_Shared
|
|
{
|
|
Eina_List *images;
|
|
|
|
int images_size;
|
|
|
|
struct {
|
|
GLint max_texture_units;
|
|
GLint max_texture_size;
|
|
GLint max_vertex_elements;
|
|
GLfloat anisotropic;
|
|
Eina_Bool rgb : 1;
|
|
Eina_Bool bgra : 1;
|
|
Eina_Bool tex_npo2 : 1;
|
|
Eina_Bool tex_rect : 1;
|
|
Eina_Bool sec_image_map : 1;
|
|
Eina_Bool sec_tbm_surface : 1;
|
|
Eina_Bool egl_tbm_ext : 1;
|
|
Eina_Bool bin_program : 1;
|
|
Eina_Bool unpack_row_length : 1;
|
|
Eina_Bool etc1 : 1;
|
|
Eina_Bool etc2 : 1;
|
|
Eina_Bool etc1_subimage : 1;
|
|
Eina_Bool s3tc : 1;
|
|
// tuning params - per gpu/cpu combo?
|
|
#define DEF_CUTOUT 4096
|
|
|
|
#define MAX_PIPES 32
|
|
#define DEF_PIPES 32
|
|
#define DEF_PIPES_SGX_540 24
|
|
#define DEF_PIPES_TEGRA_2 8
|
|
#define DEF_PIPES_TEGRA_3 24
|
|
|
|
#define MIN_ATLAS_ALLOC 16
|
|
#define MAX_ATLAS_ALLOC 1024
|
|
#define DEF_ATLAS_ALLOC 256
|
|
|
|
#define MIN_ATLAS_ALLOC_ALPHA 16
|
|
#define MAX_ATLAS_ALLOC_ALPHA 4096
|
|
#define DEF_ATLAS_ALLOC_ALPHA 512
|
|
|
|
#define MAX_ATLAS_W 512
|
|
#define DEF_ATLAS_W 512
|
|
|
|
#define MAX_ATLAS_H 512
|
|
#define DEF_ATLAS_H 512
|
|
|
|
#define ATLAS_FORMATS_COUNT 12
|
|
|
|
Eina_List *cspaces; // depend on the values of etc1, etc2 and st3c
|
|
|
|
struct {
|
|
struct {
|
|
int max;
|
|
} cutout;
|
|
struct {
|
|
int max;
|
|
} pipes;
|
|
struct {
|
|
int max_alloc_size;
|
|
int max_alloc_alpha_size;
|
|
int max_w;
|
|
int max_h;
|
|
} atlas;
|
|
} tune;
|
|
} info;
|
|
|
|
struct {
|
|
Eina_List *whole;
|
|
Eina_List *atlas[ATLAS_FORMATS_COUNT];
|
|
} tex;
|
|
|
|
Eina_Hash *native_pm_hash;
|
|
Eina_Hash *native_tex_hash;
|
|
Eina_Hash *native_wl_hash;
|
|
Eina_Hash *native_tbm_hash;
|
|
Eina_Hash *native_evasgl_hash;
|
|
|
|
Eet_File *shaders_cache;
|
|
Eina_Hash *shaders_hash;
|
|
Eina_Stringshare *shaders_checksum;
|
|
|
|
#ifdef GL_GLES
|
|
// FIXME: hack.
|
|
void *eglctxt;
|
|
#endif
|
|
|
|
int references;
|
|
int w, h;
|
|
int rot;
|
|
int mflip;
|
|
// persp map
|
|
int foc, z0, px, py;
|
|
int ax, ay;
|
|
int offx, offy;
|
|
GLfloat proj[16];
|
|
Eina_Bool needs_shaders_flush : 1;
|
|
};
|
|
|
|
typedef enum _Shader_Sampling Shader_Sampling;
|
|
typedef enum _Shader_Type Shader_Type;
|
|
|
|
enum _Shader_Sampling {
|
|
SHD_SAM11,
|
|
SHD_SAM12,
|
|
SHD_SAM21,
|
|
SHD_SAM22,
|
|
SHD_SAM_LAST
|
|
};
|
|
|
|
enum _Shader_Type {
|
|
SHD_UNKNOWN,
|
|
SHD_RECT,
|
|
SHD_LINE,
|
|
SHD_FONT,
|
|
SHD_IMAGE,
|
|
SHD_IMAGENATIVE,
|
|
SHD_YUV,
|
|
SHD_YUY2,
|
|
SHD_NV12,
|
|
SHD_YUV_709,
|
|
SHD_YUY2_709,
|
|
SHD_NV12_709,
|
|
SHD_RGB_A_PAIR,
|
|
SHD_MAP,
|
|
SHD_FILTER_DISPLACE,
|
|
SHD_FILTER_CURVE,
|
|
SHD_FILTER_BLUR_X,
|
|
SHD_FILTER_BLUR_Y
|
|
};
|
|
|
|
#define ARRAY_BUFFER_USE 500
|
|
#define ARRAY_BUFFER_USE_SHIFT 100
|
|
|
|
struct _Evas_Engine_GL_Context
|
|
{
|
|
int references;
|
|
int w, h;
|
|
int rot;
|
|
int foc, z0, px, py;
|
|
RGBA_Draw_Context *dc;
|
|
|
|
Evas_GL_Shared *shared;
|
|
|
|
int flushnum;
|
|
struct {
|
|
int top_pipe;
|
|
struct {
|
|
Evas_GL_Program *prog;
|
|
GLuint cur_tex, cur_texu, cur_texv, cur_texa, cur_texm;
|
|
int tex_target;
|
|
int cx, cy, cw, ch;
|
|
signed char render_op;
|
|
Eina_Bool smooth : 2;
|
|
Eina_Bool blend : 2;
|
|
Eina_Bool clip : 2;
|
|
Eina_Bool anti_alias : 2;
|
|
Eina_Bool has_filter_data : 1;
|
|
} current;
|
|
} state;
|
|
|
|
struct {
|
|
int x, y, w, h;
|
|
Eina_Bool enabled : 1;
|
|
Eina_Bool used : 1;
|
|
} master_clip;
|
|
|
|
struct {
|
|
Eina_Bool size : 1;
|
|
} change;
|
|
|
|
Eina_Bool havestuff : 1;
|
|
|
|
struct {
|
|
struct {
|
|
int x, y, w, h;
|
|
Shader_Type type;
|
|
} region;
|
|
struct {
|
|
Evas_GL_Program *prog;
|
|
Evas_GL_Image *surface;
|
|
void *cur_tex_dyn, *cur_texu_dyn, *cur_texv_dyn;
|
|
GLuint cur_tex, cur_texu, cur_texv, cur_texa, cur_texm;
|
|
int tex_target;
|
|
int cx, cy, cw, ch;
|
|
signed char render_op;
|
|
Eina_Bool smooth : 2;
|
|
Eina_Bool blend : 2;
|
|
Eina_Bool mask_smooth : 2;
|
|
Eina_Bool clip : 2;
|
|
struct {
|
|
GLuint map_tex;
|
|
Eina_Bool map_nearest : 1;
|
|
Eina_Bool map_delete : 1;
|
|
} filter;
|
|
} shader;
|
|
struct {
|
|
int num, alloc;
|
|
GLshort *vertex;
|
|
GLubyte *color;
|
|
GLfloat *texuv;
|
|
GLfloat *texuv2;
|
|
GLfloat *texuv3;
|
|
GLfloat *texa;
|
|
GLfloat *texsam;
|
|
GLfloat *mask;
|
|
GLfloat *masksam;
|
|
int filter_data_count; // number of vec2
|
|
GLfloat *filter_data;
|
|
Evas_GL_Image *im;
|
|
GLuint buffer;
|
|
int buffer_alloc;
|
|
int buffer_use;
|
|
Eina_Bool line : 1;
|
|
Eina_Bool use_vertex : 1; // always true
|
|
Eina_Bool use_color : 1;
|
|
Eina_Bool use_texuv : 1;
|
|
Eina_Bool use_texuv2 : 1;
|
|
Eina_Bool use_texuv3 : 1;
|
|
Eina_Bool use_texa : 1;
|
|
Eina_Bool use_texsam : 1;
|
|
Eina_Bool use_mask : 1;
|
|
Eina_Bool use_masksam : 1;
|
|
Eina_Bool anti_alias : 1;
|
|
} array;
|
|
} pipe[MAX_PIPES];
|
|
|
|
Eina_List *font_glyph_textures;
|
|
Eina_List *font_glyph_images;
|
|
Evas_GL_Image *def_surface;
|
|
RGBA_Image *font_surface;
|
|
|
|
#ifdef GL_GLES
|
|
// FIXME: hack. expose egl display to gl core for egl image sec extn.
|
|
void *egldisp;
|
|
void *eglctxt;
|
|
#else
|
|
int glxcfg_rgb;
|
|
int glxcfg_rgba;
|
|
#endif
|
|
|
|
GLuint preserve_bit;
|
|
int gles_version;
|
|
};
|
|
|
|
struct _Evas_GL_Texture_Pool
|
|
{
|
|
Evas_Engine_GL_Context *gc;
|
|
GLuint texture, fb, stencil;
|
|
GLuint intformat, format, dataformat;
|
|
int w, h;
|
|
int references;
|
|
int slot, fslot;
|
|
struct {
|
|
void *img;
|
|
void *buffer;
|
|
unsigned int *data;
|
|
int w, h;
|
|
int stride;
|
|
int checked_out;
|
|
int target;
|
|
} dyn;
|
|
Eina_List *allocations;
|
|
Eina_Rectangle_Pool *eina_pool;
|
|
Eina_Bool whole : 1;
|
|
Eina_Bool render : 1;
|
|
Eina_Bool native : 1;
|
|
Eina_Bool dynamic : 1;
|
|
};
|
|
|
|
struct _Evas_GL_Texture_Alloca
|
|
{
|
|
Evas_GL_Texture *tex;
|
|
int x, w;
|
|
};
|
|
|
|
struct _Evas_GL_Texture
|
|
{
|
|
Evas_Engine_GL_Context *gc;
|
|
Evas_GL_Image *im;
|
|
Evas_GL_Texture_Pool *pt, *ptu, *ptv, *ptt;
|
|
Evas_GL_Texture_Pool *pt2, *ptu2, *ptv2;
|
|
union {
|
|
Evas_GL_Texture_Pool *ptuv;
|
|
Evas_GL_Texture_Pool *pta;
|
|
};
|
|
RGBA_Font_Glyph *fglyph;
|
|
int references;
|
|
int x, y, w, h;
|
|
int tx, ty;
|
|
double sx1, sy1, sx2, sy2;
|
|
|
|
struct {
|
|
Evas_GL_Texture_Pool *pt[2], *ptuv[2];
|
|
int source;
|
|
} double_buffer;
|
|
|
|
Eina_List *targets;
|
|
Eina_Rectangle *apt, *aptt;
|
|
|
|
Eina_Bool alpha : 1;
|
|
Eina_Bool dyn : 1;
|
|
Eina_Bool uploaded : 1;
|
|
Eina_Bool was_preloaded : 1;
|
|
};
|
|
|
|
struct _Evas_GL_Image
|
|
{
|
|
Evas_Engine_GL_Context *gc;
|
|
RGBA_Image *im;
|
|
Evas_GL_Texture *tex;
|
|
Evas_Image_Load_Opts load_opts;
|
|
RGBA_Font_Glyph *fglyph;
|
|
int references;
|
|
// if im->im == NULL, it's a render-surface so these here are used
|
|
int w, h;
|
|
struct {
|
|
Evas_Colorspace space;
|
|
void *data;
|
|
unsigned char no_free : 1;
|
|
} cs;
|
|
|
|
struct {
|
|
void *data;
|
|
struct {
|
|
void (*bind) (void *image);
|
|
void (*unbind) (void *image);
|
|
void (*free) (void *image);
|
|
int (*yinvert) (void *image);
|
|
} func;
|
|
void *disp;
|
|
Evas_GL_Shared *shared;
|
|
int target;
|
|
Eina_Bool yinvert : 1;
|
|
Eina_Bool mipmap : 1;
|
|
Eina_Bool loose : 1;
|
|
} native;
|
|
|
|
struct {
|
|
Evas_GL_Image *origin;
|
|
Eina_Bool smooth : 1;
|
|
} scaled;
|
|
|
|
Eina_List *filtered;
|
|
Eina_List *targets;
|
|
Eina_Inlist *maps; /* Evas_GL_Image_Data_Map */
|
|
|
|
Evas_Image_Orient orient;
|
|
int scale_hint, content_hint;
|
|
int csize;
|
|
|
|
Eina_Bool dirty : 1;
|
|
Eina_Bool cached : 1;
|
|
Eina_Bool alpha : 1;
|
|
Eina_Bool tex_only : 1;
|
|
Eina_Bool locked : 1; // gl_surface_lock/unlock
|
|
Eina_Bool direct : 1; // evas gl direct renderable
|
|
/*Disable generate atlas for texture unit, EINA_FALSE by default*/
|
|
Eina_Bool disable_atlas : 1;
|
|
};
|
|
|
|
struct _Evas_GL_Font_Texture
|
|
{
|
|
Evas_GL_Texture *tex;
|
|
};
|
|
|
|
struct _Evas_GL_Polygon
|
|
{
|
|
Eina_List *points;
|
|
Eina_Bool changed : 1;
|
|
};
|
|
|
|
struct _Evas_GL_Polygon_Point
|
|
{
|
|
int x, y;
|
|
};
|
|
|
|
struct _Evas_GL_Texture_Async_Preload
|
|
{
|
|
Evas_GL_Texture *tex;
|
|
RGBA_Image *im;
|
|
|
|
Eina_Bool unpack_row_length;
|
|
};
|
|
|
|
struct _Evas_GL_Image_Data_Map
|
|
{
|
|
EINA_INLIST;
|
|
Evas_GL_Texture *tex; // one or the other
|
|
RGBA_Image *im; // one or the other
|
|
Evas_GL_Image *glim;
|
|
Eina_Rw_Slice slice;
|
|
int stride; // in bytes
|
|
int rx, ry, rw, rh; // actual map region
|
|
Evas_Colorspace cspace;
|
|
Efl_Gfx_Buffer_Access_Mode mode;
|
|
};
|
|
|
|
/* GL_Common function that are used by gl_generic inherited module */
|
|
EAPI void evas_gl_common_image_all_unload(Evas_Engine_GL_Context *gc);
|
|
EAPI void evas_gl_common_image_ref(Evas_GL_Image *im);
|
|
EAPI void evas_gl_common_image_unref(Evas_GL_Image *im);
|
|
EAPI Evas_GL_Image *evas_gl_common_image_new_from_data(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, DATA32 *data, int alpha, Evas_Colorspace cspace);
|
|
EAPI void evas_gl_common_image_native_disable(Evas_GL_Image *im);
|
|
EAPI void evas_gl_common_image_free(Evas_GL_Image *im);
|
|
EAPI void evas_gl_common_image_native_enable(Evas_GL_Image *im);
|
|
|
|
EAPI int evas_gl_preload_init(void);
|
|
EAPI int evas_gl_preload_shutdown(void);
|
|
EAPI Eina_Bool evas_gl_preload_enabled(void);
|
|
|
|
EAPI Evas_Engine_GL_Context *evas_gl_common_context_new(void);
|
|
|
|
EAPI void evas_gl_common_context_flush(Evas_Engine_GL_Context *gc);
|
|
EAPI void evas_gl_common_context_free(Evas_Engine_GL_Context *gc);
|
|
EAPI void evas_gl_common_context_use(Evas_Engine_GL_Context *gc);
|
|
EAPI void evas_gl_common_context_newframe(Evas_Engine_GL_Context *gc);
|
|
EAPI void evas_gl_common_context_done(Evas_Engine_GL_Context *gc);
|
|
|
|
EAPI void evas_gl_common_context_resize(Evas_Engine_GL_Context *gc, int w, int h, int rot);
|
|
EAPI int evas_gl_common_buffer_dump(Evas_Engine_GL_Context *gc, const char* dname, const char* fname, int frame, const char* suffix);
|
|
|
|
EAPI void evas_gl_preload_render_lock(evas_gl_make_current_cb make_current, void *engine_data);
|
|
EAPI void evas_gl_preload_render_unlock(evas_gl_make_current_cb make_current, void *engine_data);
|
|
EAPI void evas_gl_preload_render_relax(evas_gl_make_current_cb make_current, void *engine_data);
|
|
EAPI void evas_gl_symbols(void *(*GetProcAddress)(const char *name), const char *extsn);
|
|
|
|
EAPI void evas_gl_common_error_set(int error_enum);
|
|
EAPI int evas_gl_common_error_get(void);
|
|
EAPI void *evas_gl_common_current_context_get(void);
|
|
|
|
typedef int (*Evas_GL_Preload)(void);
|
|
typedef void (*Evas_GL_Common_Image_Call)(Evas_GL_Image *im);
|
|
typedef void (*Evas_GL_Common_Context_Call)(Evas_Engine_GL_Context *gc);
|
|
typedef Evas_GL_Image *(*Evas_GL_Common_Image_New_From_Data)(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, DATA32 *data, int alpha, Evas_Colorspace cspace);
|
|
typedef void (*Evas_GL_Preload_Render_Call)(evas_gl_make_current_cb make_current, void *engine_data);
|
|
typedef Evas_Engine_GL_Context *(*Evas_GL_Common_Context_New)(void);
|
|
typedef void (*Evas_GL_Common_Context_Resize_Call)(Evas_Engine_GL_Context *gc, int w, int h, int rot);
|
|
typedef int (*Evas_GL_Common_Buffer_Dump_Call)(Evas_Engine_GL_Context *gc,const char* dname, const char* fname, int frame, const char* suffix);
|
|
typedef void (*Evas_Gl_Symbols)(void *(*GetProcAddress)(const char *sym), const char *extsn);
|
|
|
|
EAPI void __evas_gl_err(int err, const char *file, const char *func, int line, const char *op);
|
|
|
|
int evas_gl_common_version_check(int *minor_version);
|
|
void evas_gl_common_tiling_start(Evas_Engine_GL_Context *gc,
|
|
int rot, int gw, int gh,
|
|
int cx, int cy, int cw, int ch,
|
|
int bitmask);
|
|
void evas_gl_common_tiling_done(Evas_Engine_GL_Context *gc);
|
|
void evas_gl_common_context_target_surface_set(Evas_Engine_GL_Context *gc, Evas_GL_Image *surface);
|
|
|
|
void evas_gl_common_context_line_push(Evas_Engine_GL_Context *gc,
|
|
int x1, int y1, int x2, int y2,
|
|
int clip, int cx, int cy, int cw, int ch,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a);
|
|
void evas_gl_common_context_rectangle_push(Evas_Engine_GL_Context *gc,
|
|
int x, int y, int w, int h,
|
|
int r, int g, int b, int a,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color);
|
|
void evas_gl_common_context_image_push(Evas_Engine_GL_Context *gc,
|
|
Evas_GL_Texture *tex,
|
|
double sx, double sy, double sw, double sh,
|
|
int x, int y, int w, int h,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a,
|
|
Eina_Bool smooth, Eina_Bool tex_only);
|
|
void evas_gl_common_context_font_push(Evas_Engine_GL_Context *gc,
|
|
Evas_GL_Texture *tex,
|
|
double sx, double sy, double sw, double sh,
|
|
int x, int y, int w, int h,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a);
|
|
void evas_gl_common_context_yuv_push(Evas_Engine_GL_Context *gc,
|
|
Evas_GL_Texture *tex,
|
|
double sx, double sy, double sw, double sh,
|
|
int x, int y, int w, int h,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a,
|
|
Eina_Bool smooth);
|
|
void evas_gl_common_context_yuv_709_push(Evas_Engine_GL_Context *gc,
|
|
Evas_GL_Texture *tex,
|
|
double sx, double sy, double sw, double sh,
|
|
int x, int y, int w, int h,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a,
|
|
Eina_Bool smooth);
|
|
void evas_gl_common_context_yuy2_push(Evas_Engine_GL_Context *gc,
|
|
Evas_GL_Texture *tex,
|
|
double sx, double sy, double sw, double sh,
|
|
int x, int y, int w, int h,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a,
|
|
Eina_Bool smooth);
|
|
void evas_gl_common_context_nv12_push(Evas_Engine_GL_Context *gc,
|
|
Evas_GL_Texture *tex,
|
|
double sx, double sy, double sw, double sh,
|
|
int x, int y, int w, int h,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a,
|
|
Eina_Bool smooth);
|
|
void evas_gl_common_context_rgb_a_pair_push(Evas_Engine_GL_Context *gc,
|
|
Evas_GL_Texture *tex,
|
|
double sx, double sy, double sw, double sh,
|
|
int x, int y, int w, int h,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a,
|
|
Eina_Bool smooth);
|
|
void evas_gl_common_context_image_map_push(Evas_Engine_GL_Context *gc,
|
|
Evas_GL_Texture *tex,
|
|
int npoints,
|
|
RGBA_Map_Point *p,
|
|
int clip, int cx, int cy, int cw, int ch,
|
|
Evas_GL_Texture *mtex, int mx, int my, int mw, int mh,
|
|
Eina_Bool mask_smooth, Eina_Bool mask_color,
|
|
int r, int g, int b, int a,
|
|
Eina_Bool smooth,
|
|
Eina_Bool tex_only,
|
|
Evas_Colorspace cspace);
|
|
|
|
// Gfx Filters
|
|
void evas_gl_common_filter_displace_push(Evas_Engine_GL_Context *gc, Evas_GL_Texture *tex, Evas_GL_Texture *map_tex,
|
|
int x, int y, int w, int h, double dx, double dy, Eina_Bool nearest);
|
|
void evas_gl_common_filter_curve_push(Evas_Engine_GL_Context *gc, Evas_GL_Texture *tex,
|
|
int x, int y, int w, int h, const uint8_t *points, int channel);
|
|
void evas_gl_common_filter_blur_push(Evas_Engine_GL_Context *gc, Evas_GL_Texture *tex, double sx, double sy, double sw, double sh,
|
|
double dx, double dy, double dw, double dh, const double * const values, const double * const offsets, int count, double radius,
|
|
Eina_Bool horiz);
|
|
|
|
int evas_gl_common_shader_program_init(Evas_GL_Shared *shared);
|
|
void evas_gl_common_shader_program_shutdown(Evas_GL_Shared *shared);
|
|
EAPI void evas_gl_common_shaders_flush(Evas_GL_Shared *shared);
|
|
|
|
Evas_GL_Program *evas_gl_common_shader_program_get(Evas_Engine_GL_Context *gc,
|
|
Shader_Type type,
|
|
RGBA_Map_Point *p, int npoints,
|
|
int r, int g, int b, int a,
|
|
int sw, int sh, int w, int h, Eina_Bool smooth,
|
|
Evas_GL_Texture *tex, Eina_Bool tex_only,
|
|
Evas_GL_Texture *mtex, Eina_Bool mask_smooth,
|
|
Eina_Bool mask_color, int mw, int mh,
|
|
Shader_Sampling *psam, int *pnomul,
|
|
Shader_Sampling *pmasksam);
|
|
void evas_gl_common_shader_textures_bind(Evas_GL_Program *p);
|
|
|
|
Eina_Bool evas_gl_common_file_cache_is_dir(const char *file);
|
|
Eina_Bool evas_gl_common_file_cache_mkdir(const char *dir);
|
|
Eina_Bool evas_gl_common_file_cache_file_exists(const char *file);
|
|
Eina_Bool evas_gl_common_file_cache_mkpath_if_not_exists(const char *path);
|
|
Eina_Bool evas_gl_common_file_cache_mkpath(const char *path);
|
|
int evas_gl_common_file_cache_dir_check(char *cache_dir, int num);
|
|
int evas_gl_common_file_cache_file_check(const char *cache_dir, const char *cache_name, char *cache_file, int dir_num);
|
|
|
|
void evas_gl_common_rect_draw(Evas_Engine_GL_Context *gc, int x, int y, int w, int h);
|
|
|
|
void evas_gl_texture_pool_empty(Evas_GL_Texture_Pool *pt);
|
|
Evas_GL_Texture *evas_gl_common_texture_new(Evas_Engine_GL_Context *gc, RGBA_Image *im, Eina_Bool disable_atlas);
|
|
Evas_GL_Texture *evas_gl_common_texture_native_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, Evas_GL_Image *im);
|
|
Evas_GL_Texture *evas_gl_common_texture_render_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, int stencil);
|
|
Evas_GL_Texture *evas_gl_common_texture_render_noscale_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha);
|
|
Evas_GL_Texture *evas_gl_common_texture_dynamic_new(Evas_Engine_GL_Context *gc, Evas_GL_Image *im);
|
|
void evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im);
|
|
void evas_gl_common_texture_upload(Evas_GL_Texture *tex, RGBA_Image *im, unsigned int bytes_count);
|
|
void evas_gl_common_texture_free(Evas_GL_Texture *tex, Eina_Bool force);
|
|
Evas_GL_Texture *evas_gl_common_texture_alpha_new(Evas_Engine_GL_Context *gc, DATA8 *pixels, unsigned int w, unsigned int h, int fh);
|
|
void evas_gl_common_texture_alpha_update(Evas_GL_Texture *tex, DATA8 *pixels, unsigned int w, unsigned int h, int fh);
|
|
Evas_GL_Texture *evas_gl_common_texture_yuv_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
|
|
void evas_gl_common_texture_yuv_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned int w, unsigned int h);
|
|
Evas_GL_Texture *evas_gl_common_texture_yuy2_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
|
|
void evas_gl_common_texture_yuy2_update(Evas_GL_Texture *tex, DATA8 **rows, unsigned int w, unsigned int h);
|
|
Evas_GL_Texture *evas_gl_common_texture_nv12_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
|
|
void evas_gl_common_texture_nv12_update(Evas_GL_Texture *tex, DATA8 **row, unsigned int w, unsigned int h);
|
|
Evas_GL_Texture *evas_gl_common_texture_nv12tiled_new(Evas_Engine_GL_Context *gc, DATA8 **rows, unsigned int w, unsigned int h);
|
|
void evas_gl_common_texture_nv12tiled_update(Evas_GL_Texture *tex, DATA8 **row, unsigned int w, unsigned int h);
|
|
Evas_GL_Texture *evas_gl_common_texture_rgb_a_pair_new(Evas_Engine_GL_Context *gc, RGBA_Image *im);
|
|
void evas_gl_common_texture_rgb_a_pair_update(Evas_GL_Texture *tex, RGBA_Image *im);
|
|
Evas_Colorspace evas_gl_common_gl_format_to_colorspace(GLuint f);
|
|
|
|
void evas_gl_common_image_alloc_ensure(Evas_GL_Image *im);
|
|
Evas_GL_Image *evas_gl_common_image_load(Evas_Engine_GL_Context *gc, const char *file, const char *key, Evas_Image_Load_Opts *lo, int *error);
|
|
Evas_GL_Image *evas_gl_common_image_mmap(Evas_Engine_GL_Context *gc, Eina_File *f, const char *key, Evas_Image_Load_Opts *lo, int *error);
|
|
Evas_GL_Image *evas_gl_common_image_new_from_copied_data(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, DATA32 *data, int alpha, Evas_Colorspace cspace);
|
|
Evas_GL_Image *evas_gl_common_image_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, Evas_Colorspace cspace);
|
|
Evas_GL_Image *evas_gl_common_image_new_from_rgbaimage(Evas_Engine_GL_Context *gc, RGBA_Image *im, Evas_Image_Load_Opts *lo, int *error);
|
|
void evas_gl_common_image_preload_watch(Evas_GL_Image *im);
|
|
void evas_gl_common_image_preload_unwatch(Evas_GL_Image *im);
|
|
Evas_GL_Image *evas_gl_common_image_alpha_set(Evas_GL_Image *im, int alpha);
|
|
void evas_gl_common_image_scale_hint_set(Evas_GL_Image *im, int hint);
|
|
void evas_gl_common_image_content_hint_set(Evas_GL_Image *im, int hint);
|
|
void evas_gl_common_image_cache_flush(Evas_Engine_GL_Context *gc);
|
|
Evas_GL_Image *evas_gl_common_image_surface_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha, int stencil);
|
|
Evas_GL_Image *evas_gl_common_image_surface_noscale_new(Evas_Engine_GL_Context *gc, unsigned int w, unsigned int h, int alpha);
|
|
void evas_gl_common_image_dirty(Evas_GL_Image *im, unsigned int x, unsigned int y, unsigned int w, unsigned int h);
|
|
void evas_gl_common_image_update(Evas_Engine_GL_Context *gc, Evas_GL_Image *im);
|
|
void evas_gl_common_image_map_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im, int npoints, RGBA_Map_Point *p, int smooth, int level);
|
|
void evas_gl_common_image_draw(Evas_Engine_GL_Context *gc, Evas_GL_Image *im, int sx, int sy, int sw, int sh, int dx, int dy, int dw, int dh, int smooth);
|
|
Evas_GL_Image *evas_gl_common_image_surface_update(Evas_GL_Image *im);
|
|
Evas_GL_Image *evas_gl_common_image_surface_detach(Evas_GL_Image *im);
|
|
Evas_GL_Image *evas_gl_common_image_virtual_scaled_get(Evas_GL_Image *scaled, Evas_GL_Image *image, int dst_w, int dst_h, Eina_Bool smooth);
|
|
|
|
void *evas_gl_font_texture_new(void *gc, RGBA_Font_Glyph *fg);
|
|
void evas_gl_font_texture_free(void *);
|
|
void evas_gl_font_texture_draw(void *gc, void *surface, void *dc, RGBA_Font_Glyph *fg, int x, int y, int w, int h);
|
|
void *evas_gl_font_image_new(void *gc, RGBA_Font_Glyph *fg, int alpha, Evas_Colorspace cspace);
|
|
void evas_gl_font_image_free(void *im);
|
|
void evas_gl_font_image_draw(void *gc, void *im, int dx, int dy, int dw, int dh, int smooth);
|
|
|
|
Evas_GL_Polygon *evas_gl_common_poly_point_add(Evas_GL_Polygon *poly, int x, int y);
|
|
Evas_GL_Polygon *evas_gl_common_poly_points_clear(Evas_GL_Polygon *poly);
|
|
void evas_gl_common_poly_draw(Evas_Engine_GL_Context *gc, Evas_GL_Polygon *poly, int x, int y);
|
|
|
|
void evas_gl_common_line_draw(Evas_Engine_GL_Context *gc, int x1, int y1, int x2, int y2);
|
|
|
|
extern void (*glsym_glGenFramebuffers) (GLsizei a, GLuint *b);
|
|
extern void (*glsym_glBindFramebuffer) (GLenum a, GLuint b);
|
|
extern void (*glsym_glFramebufferTexture2D) (GLenum a, GLenum b, GLenum c, GLuint d, GLint e);
|
|
extern void (*glsym_glDeleteFramebuffers) (GLsizei a, const GLuint *b);
|
|
extern void (*glsym_glGetProgramBinary) (GLuint a, GLsizei b, GLsizei *c, GLenum *d, void *e);
|
|
extern void (*glsym_glProgramBinary) (GLuint a, GLenum b, const void *c, GLint d);
|
|
extern void (*glsym_glProgramParameteri) (GLuint a, GLuint b, GLint d);
|
|
extern void (*glsym_glReleaseShaderCompiler)(void);
|
|
extern void *(*glsym_glMapBuffer) (GLenum a, GLenum b);
|
|
extern GLboolean (*glsym_glUnmapBuffer) (GLenum a);
|
|
extern void (*glsym_glRenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
|
|
|
|
#ifdef GL_GLES
|
|
EAPI void * evas_gl_common_eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list);
|
|
EAPI int evas_gl_common_eglDestroyImage (EGLDisplay dpy, void *im);
|
|
extern unsigned int (*eglsym_eglDestroyImage) (void *a, void *b);
|
|
extern void (*secsym_glEGLImageTargetTexture2DOES) (int a, void *b);
|
|
extern void *(*secsym_eglMapImageSEC) (void *a, void *b, int c, int d);
|
|
extern unsigned int (*secsym_eglUnmapImageSEC) (void *a, void *b, int c);
|
|
extern unsigned int (*secsym_eglGetImageAttribSEC) (void *a, void *b, int c, int *d);
|
|
|
|
// TBM Surface stuff
|
|
#define TBM_SURF_PLANE_MAX 4 /**< maximum number of planes */
|
|
|
|
/* option to map the tbm_surface */
|
|
#define TBM_SURF_OPTION_READ (1 << 0) /**< access option to read */
|
|
#define TBM_SURF_OPTION_WRITE (1 << 1) /**< access option to write */
|
|
|
|
#define __tbm_fourcc_code(a,b,c,d) ((uint32_t)(a) | ((uint32_t)(b) << 8) | \
|
|
((uint32_t)(c) << 16) | ((uint32_t)(d) << 24))
|
|
|
|
#define TBM_FORMAT_C8 __tbm_fourcc_code('C', '8', ' ', ' ')
|
|
#define TBM_FORMAT_RGBA8888 __tbm_fourcc_code('R', 'A', '2', '4')
|
|
#define TBM_FORMAT_BGRA8888 __tbm_fourcc_code('B', 'A', '2', '4')
|
|
#define TBM_FORMAT_RGB888 __tbm_fourcc_code('R', 'G', '2', '4')
|
|
|
|
typedef struct _tbm_surface * tbm_surface_h;
|
|
typedef uint32_t tbm_format;
|
|
typedef struct _tbm_surface_plane
|
|
{
|
|
unsigned char *ptr; /**< Plane pointer */
|
|
uint32_t size; /**< Plane size */
|
|
uint32_t offset; /**< Plane offset */
|
|
uint32_t stride; /**< Plane stride */
|
|
|
|
void *reserved1; /**< Reserved pointer1 */
|
|
void *reserved2; /**< Reserved pointer2 */
|
|
void *reserved3; /**< Reserved pointer3 */
|
|
} tbm_surface_plane_s;
|
|
|
|
typedef struct _tbm_surface_info
|
|
{
|
|
uint32_t width; /**< TBM surface width */
|
|
uint32_t height; /**< TBM surface height */
|
|
tbm_format format; /**< TBM surface format*/
|
|
uint32_t bpp; /**< TBM surface bbp */
|
|
uint32_t size; /**< TBM surface size */
|
|
|
|
uint32_t num_planes; /**< The number of planes */
|
|
tbm_surface_plane_s planes[TBM_SURF_PLANE_MAX]; /**< Array of planes */
|
|
|
|
void *reserved4; /**< Reserved pointer4 */
|
|
void *reserved5; /**< Reserved pointer5 */
|
|
void *reserved6; /**< Reserved pointer6 */
|
|
} tbm_surface_info_s;
|
|
|
|
|
|
extern void *(*secsym_tbm_surface_create) (int width, int height, unsigned int format);
|
|
extern int (*secsym_tbm_surface_destroy) (void *surface);
|
|
extern int (*secsym_tbm_surface_map) (void *surface, int opt, void *info);
|
|
extern int (*secsym_tbm_surface_unmap) (void *surface);
|
|
extern int (*secsym_tbm_surface_get_info) (void *surface, void *info);
|
|
#endif
|
|
|
|
Eina_Bool evas_gl_preload_push(Evas_GL_Texture_Async_Preload *async);
|
|
void evas_gl_preload_pop(Evas_GL_Texture *tex);
|
|
void evas_gl_preload_target_register(Evas_GL_Texture *tex, Eo *target);
|
|
void evas_gl_preload_target_unregister(Evas_GL_Texture *tex, Eo *target);
|
|
|
|
void pt_unref(Evas_GL_Texture_Pool *pt);
|
|
|
|
// Enable GL errors logging
|
|
//#define GL_ERRORS 1
|
|
// Enable very basic GL calls logging (requires GL_ERRORS)
|
|
//#define GL_ERRORS_TRACE 1
|
|
|
|
#ifdef GL_ERRORS
|
|
|
|
# ifndef _WIN32
|
|
# include <dlfcn.h>
|
|
# endif
|
|
|
|
static inline void
|
|
__evas_gl_errdyn(int err, const char *file, const char *func, int line, const char *op)
|
|
{
|
|
static void (*sym)(int,const char*,const char*,int,const char*) = NULL;
|
|
if (!sym) sym = dlsym(RTLD_DEFAULT, "__evas_gl_err");
|
|
sym(err, file, func, line, op);
|
|
}
|
|
# define GLERRV(op) do { \
|
|
int __gl_err = glGetError(); \
|
|
if (__gl_err != GL_NO_ERROR) \
|
|
__evas_gl_errdyn(__gl_err, __FILE__, __FUNCTION__, __LINE__, op); \
|
|
} while (0)
|
|
/* Redefine common gl funcs */
|
|
# ifndef GL_ERRORS_NODEF
|
|
# ifndef GL_ERRORS_TRACE
|
|
# define GL_ERROR_TRACE(f, _args, ...) do { GLERRV("Uncaught error before this point:"); f(__VA_ARGS__); GLERRV(#f); } while(0)
|
|
# define GL_ERROR_TRACE_RET(t, f, _args, ...) ({ t _r = f(__VA_ARGS__); GLERRV(#f); _r; })
|
|
# else
|
|
# define GL_ERROR_TRACE(f, _args, ...) do { DBG("%s(%s);", #f, _args); f(__VA_ARGS__); GLERRV(#f); } while(0)
|
|
# define GL_ERROR_TRACE_RET(t, f, _args, ...) ({ t _r; DBG("%s(%s);", #f, _args); _r = f(__VA_ARGS__); GLERRV(#f); _r; })
|
|
# endif
|
|
# define glActiveTexture(...) GL_ERROR_TRACE(glActiveTexture, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glBindAttribLocation(...) GL_ERROR_TRACE(glBindAttribLocation, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glBindBuffer(...) GL_ERROR_TRACE(glBindBuffer, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glBindTexture(...) GL_ERROR_TRACE(glBindTexture, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glBlendFunc(...) GL_ERROR_TRACE(glBlendFunc, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glBufferData(...) GL_ERROR_TRACE(glBufferData, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glCompressedTexSubImage2D(...) GL_ERROR_TRACE(glCompressedTexSubImage2D, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glDeleteBuffers(...) GL_ERROR_TRACE(glDeleteBuffers, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glDepthMask(...) GL_ERROR_TRACE(glDepthMask, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glDisable(...) GL_ERROR_TRACE(glDisable, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glDisableVertexAttribArray(...) GL_ERROR_TRACE(glDisableVertexAttribArray, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glDrawArrays(...) GL_ERROR_TRACE(glDrawArrays, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glEnable(...) GL_ERROR_TRACE(glEnable, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glEnableVertexAttribArray(...) GL_ERROR_TRACE(glEnableVertexAttribArray, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGenBuffers(...) GL_ERROR_TRACE(glGenBuffers, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGetFloatv(...) GL_ERROR_TRACE(glGetFloatv, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGetIntegerv(...) GL_ERROR_TRACE(glGetIntegerv, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGetUniformLocation(...) GL_ERROR_TRACE_RET(GLuint, glGetUniformLocation, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glHint(...) GL_ERROR_TRACE(glHint, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glReadPixels(...) GL_ERROR_TRACE(glReadPixels, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glScissor(...) GL_ERROR_TRACE(glScissor, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGenFramebuffers(...) GL_ERROR_TRACE(glGenFramebuffers, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glBindFramebuffer(...) GL_ERROR_TRACE(glBindFramebuffer, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glEndTiling(...) GL_ERROR_TRACE(glEndTiling, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGetProgramBinary(...) GL_ERROR_TRACE(glGetProgramBinary, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glMapBuffer(...) GL_ERROR_TRACE_RET(void *, glMapBuffer, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glStartTiling(...) GL_ERROR_TRACE(glStartTiling, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glUnmapBuffer(...) GL_ERROR_TRACE(glUnmapBuffer, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glTexParameterf(...) GL_ERROR_TRACE(glTexParameterf, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glTexParameteri(...) GL_ERROR_TRACE(glTexParameteri, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glTexSubImage2D(...) GL_ERROR_TRACE(glTexSubImage2D, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glTexImage2D(...) GL_ERROR_TRACE(glTexImage2D, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glUniform1f(...) GL_ERROR_TRACE(glUniform1f, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glUniform1i(...) GL_ERROR_TRACE(glUniform1i, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glUniform2fv(...) GL_ERROR_TRACE(glUniform2fv, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glUniform4fv(...) GL_ERROR_TRACE(glUniform4fv, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glUniformMatrix4fv(...) GL_ERROR_TRACE(glUniformMatrix4fv, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glUseProgram(...) GL_ERROR_TRACE(glUseProgram, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glVertexAttribPointer(...) GL_ERROR_TRACE(glVertexAttribPointer, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glViewport(...) GL_ERROR_TRACE(glViewport, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glPixelStorei(...) GL_ERROR_TRACE(glPixelStorei, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glCompressedTexImage2D(...) GL_ERROR_TRACE(glCompressedTexImage2D, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glCreateShader(...) GL_ERROR_TRACE_RET(GLuint, glCreateShader, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glCreateProgram(...) GL_ERROR_TRACE_RET(GLuint, glCreateProgram, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glAttachShader(...) GL_ERROR_TRACE(glAttachShader, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glLinkProgram(...) GL_ERROR_TRACE(glLinkProgram, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGetProgramiv(...) GL_ERROR_TRACE(glGetProgramiv, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGetProgramInfoLog(...) GL_ERROR_TRACE(glGetProgramInfoLog, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glGetShaderiv(...) GL_ERROR_TRACE(glGetShaderiv, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glShaderSource(...) GL_ERROR_TRACE(glShaderSource, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glCompileShader(...) GL_ERROR_TRACE(glCompileShader, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glGenFramebuffers(...) GL_ERROR_TRACE(glsym_glGenFramebuffers, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glBindFramebuffer(...) GL_ERROR_TRACE(glsym_glBindFramebuffer, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glFramebufferTexture2D(...) GL_ERROR_TRACE(glsym_glFramebufferTexture2D, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glDeleteFramebuffers(...) GL_ERROR_TRACE(glsym_glDeleteFramebuffers, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glGetProgramBinary(...) GL_ERROR_TRACE(glsym_glGetProgramBinary, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glProgramBinary(...) GL_ERROR_TRACE(glsym_glProgramBinary, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glProgramParameteri(...) GL_ERROR_TRACE(glsym_glProgramParameteri, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glReleaseShaderCompiler(...) GL_ERROR_TRACE(glsym_glReleaseShaderCompiler, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glMapBuffer(...) GL_ERROR_TRACE_RET(void *, glsym_glMapBuffer, #__VA_ARGS__, __VA_ARGS__)
|
|
# define glsym_glUnmapBuffer(...) GL_ERROR_TRACE_RET(unsigned int, glsym_glUnmapBuffer, #__VA_ARGS__, __VA_ARGS__)
|
|
# define eglsym_eglCreateImage(...) GL_ERROR_TRACE_RET(void *, eglsym_eglCreateImage, #__VA_ARGS__, __VA_ARGS__)
|
|
# define eglsym_eglCreateImageKHR(...) GL_ERROR_TRACE_RET(void *, eglsym_eglCreateImageKHR, #__VA_ARGS__, __VA_ARGS__)
|
|
# define eglsym_eglDestroyImage(...) GL_ERROR_TRACE_RET(unsigned int, eglsym_eglDestroyImage, #__VA_ARGS__, __VA_ARGS__)
|
|
# define secsym_glEGLImageTargetTexture2DOES(...) GL_ERROR_TRACE(secsym_glEGLImageTargetTexture2DOES, #__VA_ARGS__, __VA_ARGS__)
|
|
# define secsym_eglMapImageSEC(...) GL_ERROR_TRACE_RET(void *, secsym_eglMapImageSEC, #__VA_ARGS__, __VA_ARGS__)
|
|
# define secsym_eglUnmapImageSEC(...) GL_ERROR_TRACE_RET(unsigned int, secsym_eglUnmapImageSEC, #__VA_ARGS__, __VA_ARGS__)
|
|
# define secsym_eglGetImageAttribSEC(...) GL_ERROR_TRACE_RET(unsigned int, secsym_eglGetImageAttribSEC, #__VA_ARGS__, __VA_ARGS__)
|
|
# endif
|
|
#else
|
|
# define GLERRV(op)
|
|
#endif
|
|
|
|
Eina_Bool evas_gl_common_module_open(void);
|
|
void evas_gl_common_module_close(void);
|
|
|
|
#ifndef EVAS_GL_NO_HEADERS
|
|
|
|
static inline void
|
|
_tex_sub_2d(Evas_Engine_GL_Context *gc, int x, int y, int w, int h, int fmt, int type, const void *pix)
|
|
{
|
|
if ((w > gc->shared->info.max_texture_size) ||
|
|
(h > gc->shared->info.max_texture_size)) return;
|
|
glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, fmt, type, pix);
|
|
}
|
|
|
|
static inline void
|
|
_comp_tex_sub_2d(Evas_Engine_GL_Context *gc, int x, int y, int w, int h, int fmt, int imgsize, const void *pix)
|
|
{
|
|
if ((w > gc->shared->info.max_texture_size) ||
|
|
(h > gc->shared->info.max_texture_size)) return;
|
|
glCompressedTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, fmt, imgsize, pix);
|
|
}
|
|
|
|
#endif
|
|
|
|
#include "evas_gl_3d_common.h"
|
|
|
|
#undef EAPI
|
|
#define EAPI
|
|
|
|
extern Eina_Bool _need_context_restore;
|
|
extern void _context_restore(void);
|
|
|
|
#endif
|