remove unused code, leave the ector buffer for evas_filter feature.
Change-Id: I86ad883fc094fdcc9c3216fe2e17d51ebe6b6db1
#ifdef EFL_BETA_API_SUPPORT
/**
- * @typedef Ector_Surface
- * The base type to render content into.
- */
-typedef Eo Ector_Surface;
-
-/**
- * @typedef Ector_Renderer
- * The base type describing what to render.
- */
-typedef Eo Ector_Renderer;
-
-/**
- * @typedef Ector_Colorspace
- * The definition of colorspace.
- */
- // FIXME: Enable this when we have merged Emile
-/* typedef Evas_Colorspace Ector_Colorspace; */
-
-/**
- * Priorities
- */
-typedef enum _Ector_Priority
-{
- ECTOR_PRIORITY_NONE = 0,
- ECTOR_PRIORITY_MARGINAL = 64,
- ECTOR_PRIORITY_SECONDARY = 128,
- ECTOR_PRIORITY_PRIMARY = 256,
-} Ector_Priority;
-
-/**
- * What kind of update is being pushed
- */
-typedef enum _Ector_Update_Type
-{
- ECTOR_UPDATE_BACKGROUND = 1, /* All the previous state in that area is reset to the new updated profile */
- ECTOR_UPDATE_EMPTY = 2, /* Pushing empty area (no visible pixels at all, no need to read this surface to render it) */
- ECTOR_UPDATE_ALPHA = 4, /* Pushing some transparent pixels (this impacts the under layer and will require reading back the surface where this surface is blitted) */
- ECTOR_UPDATE_OPAQUE = 8 /* Pushing some opaque pixels (this means that there is no need to read the under layer when blitting this surface) */
-} Ector_Update_Type;
-
-/**
* @brief Init the ector subsystem
* @return @c EINA_TRUE on success.
*
*/
EAPI int ector_shutdown(void);
-/**
- * @brief Registers OpenGL API calls with the internal Ector_GL_API.
- *
- * @param glsym Function to use for looking up dynamically loaded symbols
- * @param lib Dynamically loaded shared object, or RTLD_DEFAULT or RTLD_NEXT
- * @return EINA_TRUE if call succeeded, EINA_FALSE if glsym was undefined or an error occurred
- *
- * The RTLD_DEFAULT and RTLD_NEXT pseudo-handles can be passed as lib to
- * look up the first or next occurrence of the desired symbol in the dynamic
- * library search order.
- *
- * @see dlsym()
- */
-EAPI Eina_Bool ector_glsym_set(void *(*glsym)(void *lib, const char *name), void *lib);
-/* Avoid redefinition of types */
-#define _ECTOR_SURFACE_EO_CLASS_TYPE
-#define _ECTOR_RENDERER_EO_CLASS_TYPE
+#include "ector_buffer.h"
-#include "ector_surface.h"
-#include "ector_renderer.h"
-#include "ector_util.h"
#endif
}
#include "ector_buffer.eo.c"
-#include "ector_surface.eo.c"
+++ /dev/null
-#ifndef ECTOR_GL_INTERNAL_H
-# define ECTOR_GL_INTERNAL_H
-
-typedef struct _Ector_GL_API Ector_GL_API;
-
-extern Ector_GL_API GL;
-
-// ignore everything below this point
-// --------------------------------------------------
-
-/*
-Some of the remainder of this file is lifted from Khronos' public
-EGL/glext headers. The copyright notice from a recent version of the
-headers is reproduced here.
-
-Much of it is from Mesa, so their copyright is included as well.
-*/
-
-/*
-** Copyright (c) 2013-2016 The Khronos Group Inc.
-**
-** Permission is hereby granted, free of charge, to any person obtaining a
-** copy of this software and/or associated documentation files (the
-** "Materials"), to deal in the Materials without restriction, including
-** without limitation the rights to use, copy, modify, merge, publish,
-** distribute, sublicense, and/or sell copies of the Materials, and to
-** permit persons to whom the Materials are furnished to do so, subject to
-** the following conditions:
-**
-** The above copyright notice and this permission notice shall be included
-** in all copies or substantial portions of the Materials.
-**
-** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
-*/
-/*
- * Mesa 3-D graphics library
- *
- * Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
- * Copyright (C) 2009 VMware, Inc. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-
-
-#ifdef GL_GLES
-typedef intptr_t EGLAttrib;
-typedef unsigned int EGLenum;
-typedef void *EGLDisplay;
-typedef void *EGLContext;
-typedef void *EGLClientBuffer;
-#define CLOWNBOAT UTTERLY
-#endif
-
-#define GL_DEPTH_BUFFER_BIT 0x00000100
-#define GL_STENCIL_BUFFER_BIT 0x00000400
-#define GL_COLOR_BUFFER_BIT 0x00004000
-
-/* Boolean */
-#define GL_FALSE 0
-#define GL_TRUE 1
-
-/* BeginMode */
-#define GL_POINTS 0x0000
-#define GL_LINES 0x0001
-#define GL_LINE_LOOP 0x0002
-#define GL_LINE_STRIP 0x0003
-#define GL_TRIANGLES 0x0004
-#define GL_TRIANGLE_STRIP 0x0005
-#define GL_TRIANGLE_FAN 0x0006
-
-/* AlphaFunction (not supported in ES20) */
-/* GL_NEVER */
-/* GL_LESS */
-/* GL_EQUAL */
-/* GL_LEQUAL */
-/* GL_GREATER */
-/* GL_NOTEQUAL */
-/* GL_GEQUAL */
-/* GL_ALWAYS */
-
-/* BlendingFactorDest */
-#define GL_ZERO 0
-#define GL_ONE 1
-#define GL_SRC_COLOR 0x0300
-#define GL_ONE_MINUS_SRC_COLOR 0x0301
-#define GL_SRC_ALPHA 0x0302
-#define GL_ONE_MINUS_SRC_ALPHA 0x0303
-#define GL_DST_ALPHA 0x0304
-#define GL_ONE_MINUS_DST_ALPHA 0x0305
-
-/* BlendingFactorSrc */
-/* GL_ZERO */
-/* GL_ONE */
-#define GL_DST_COLOR 0x0306
-#define GL_ONE_MINUS_DST_COLOR 0x0307
-#define GL_SRC_ALPHA_SATURATE 0x0308
-/* GL_SRC_ALPHA */
-/* GL_ONE_MINUS_SRC_ALPHA */
-/* GL_DST_ALPHA */
-/* GL_ONE_MINUS_DST_ALPHA */
-
-/* BlendEquationSeparate */
-#define GL_FUNC_ADD 0x8006
-#define GL_BLEND_EQUATION 0x8009
-#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */
-#define GL_BLEND_EQUATION_ALPHA 0x883D
-
-/* BlendSubtract */
-#define GL_FUNC_SUBTRACT 0x800A
-#define GL_FUNC_REVERSE_SUBTRACT 0x800B
-
-/* Separate Blend Functions */
-#define GL_BLEND_DST_RGB 0x80C8
-#define GL_BLEND_SRC_RGB 0x80C9
-#define GL_BLEND_DST_ALPHA 0x80CA
-#define GL_BLEND_SRC_ALPHA 0x80CB
-#define GL_CONSTANT_COLOR 0x8001
-#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
-#define GL_CONSTANT_ALPHA 0x8003
-#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
-#define GL_BLEND_COLOR 0x8005
-
-/* Buffer Objects */
-#define GL_ARRAY_BUFFER 0x8892
-#define GL_ELEMENT_ARRAY_BUFFER 0x8893
-#define GL_ARRAY_BUFFER_BINDING 0x8894
-#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895
-
-#define GL_STREAM_DRAW 0x88E0
-#define GL_STATIC_DRAW 0x88E4
-#define GL_DYNAMIC_DRAW 0x88E8
-
-#define GL_BUFFER_SIZE 0x8764
-#define GL_BUFFER_USAGE 0x8765
-
-#define GL_CURRENT_VERTEX_ATTRIB 0x8626
-
-/* CullFaceMode */
-#define GL_FRONT 0x0404
-#define GL_BACK 0x0405
-#define GL_FRONT_AND_BACK 0x0408
-
-/* DepthFunction */
-/* GL_NEVER */
-/* GL_LESS */
-/* GL_EQUAL */
-/* GL_LEQUAL */
-/* GL_GREATER */
-/* GL_NOTEQUAL */
-/* GL_GEQUAL */
-/* GL_ALWAYS */
-
-/* EnableCap */
-#define GL_TEXTURE_2D 0x0DE1
-#define GL_CULL_FACE 0x0B44
-#define GL_BLEND 0x0BE2
-#define GL_DITHER 0x0BD0
-#define GL_STENCIL_TEST 0x0B90
-#define GL_DEPTH_TEST 0x0B71
-#define GL_SCISSOR_TEST 0x0C11
-#define GL_POLYGON_OFFSET_FILL 0x8037
-#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
-#define GL_SAMPLE_COVERAGE 0x80A0
-
-/* ErrorCode */
-#define GL_NO_ERROR 0
-#define GL_INVALID_ENUM 0x0500
-#define GL_INVALID_VALUE 0x0501
-#define GL_INVALID_OPERATION 0x0502
-#define GL_OUT_OF_MEMORY 0x0505
-
-/* FrontFaceDirection */
-#define GL_CW 0x0900
-#define GL_CCW 0x0901
-
-/* GetPName */
-#define GL_LINE_WIDTH 0x0B21
-#define GL_ALIASED_POINT_SIZE_RANGE 0x846D
-#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E
-#define GL_CULL_FACE_MODE 0x0B45
-#define GL_FRONT_FACE 0x0B46
-#define GL_DEPTH_RANGE 0x0B70
-#define GL_DEPTH_WRITEMASK 0x0B72
-#define GL_DEPTH_CLEAR_VALUE 0x0B73
-#define GL_DEPTH_FUNC 0x0B74
-#define GL_STENCIL_CLEAR_VALUE 0x0B91
-#define GL_STENCIL_FUNC 0x0B92
-#define GL_STENCIL_FAIL 0x0B94
-#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95
-#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96
-#define GL_STENCIL_REF 0x0B97
-#define GL_STENCIL_VALUE_MASK 0x0B93
-#define GL_STENCIL_WRITEMASK 0x0B98
-#define GL_STENCIL_BACK_FUNC 0x8800
-#define GL_STENCIL_BACK_FAIL 0x8801
-#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
-#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
-#define GL_STENCIL_BACK_REF 0x8CA3
-#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
-#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
-#define GL_VIEWPORT 0x0BA2
-#define GL_SCISSOR_BOX 0x0C10
-/* GL_SCISSOR_TEST */
-#define GL_COLOR_CLEAR_VALUE 0x0C22
-#define GL_COLOR_WRITEMASK 0x0C23
-#define GL_UNPACK_ALIGNMENT 0x0CF5
-#define GL_PACK_ALIGNMENT 0x0D05
-#define GL_MAX_TEXTURE_SIZE 0x0D33
-#define GL_MAX_VIEWPORT_DIMS 0x0D3A
-#define GL_SUBPIXEL_BITS 0x0D50
-#define GL_RED_BITS 0x0D52
-#define GL_GREEN_BITS 0x0D53
-#define GL_BLUE_BITS 0x0D54
-#define GL_ALPHA_BITS 0x0D55
-#define GL_DEPTH_BITS 0x0D56
-#define GL_STENCIL_BITS 0x0D57
-#define GL_POLYGON_OFFSET_UNITS 0x2A00
-/* GL_POLYGON_OFFSET_FILL */
-#define GL_POLYGON_OFFSET_FACTOR 0x8038
-#define GL_TEXTURE_BINDING_2D 0x8069
-#define GL_SAMPLE_BUFFERS 0x80A8
-#define GL_SAMPLES 0x80A9
-#define GL_SAMPLE_COVERAGE_VALUE 0x80AA
-#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
-
-/* GetTextureParameter */
-/* GL_TEXTURE_MAG_FILTER */
-/* GL_TEXTURE_MIN_FILTER */
-/* GL_TEXTURE_WRAP_S */
-/* GL_TEXTURE_WRAP_T */
-
-#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
-#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3
-
-/* HintMode */
-#define GL_DONT_CARE 0x1100
-#define GL_FASTEST 0x1101
-#define GL_NICEST 0x1102
-
-/* HintTarget */
-#define GL_GENERATE_MIPMAP_HINT 0x8192
-
-/* DataType */
-#define GL_BYTE 0x1400
-#define GL_UNSIGNED_BYTE 0x1401
-#define GL_SHORT 0x1402
-#define GL_UNSIGNED_SHORT 0x1403
-#define GL_INT 0x1404
-#define GL_UNSIGNED_INT 0x1405
-#define GL_FLOAT 0x1406
-#define GL_FIXED 0x140C
-
-/* PixelFormat */
-#define GL_DEPTH_COMPONENT 0x1902
-#define GL_ALPHA 0x1906
-#define GL_RGB 0x1907
-#define GL_RGBA 0x1908
-#define GL_LUMINANCE 0x1909
-#define GL_LUMINANCE_ALPHA 0x190A
-
-/* PixelType */
-/* GL_UNSIGNED_BYTE */
-#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033
-#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034
-#define GL_UNSIGNED_SHORT_5_6_5 0x8363
-
-/* Shaders */
-#define GL_FRAGMENT_SHADER 0x8B30
-#define GL_VERTEX_SHADER 0x8B31
-#define GL_MAX_VERTEX_ATTRIBS 0x8869
-#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB
-#define GL_MAX_VARYING_VECTORS 0x8DFC
-#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
-#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
-#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
-#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD
-#define GL_SHADER_TYPE 0x8B4F
-#define GL_DELETE_STATUS 0x8B80
-#define GL_LINK_STATUS 0x8B82
-#define GL_VALIDATE_STATUS 0x8B83
-#define GL_ATTACHED_SHADERS 0x8B85
-#define GL_ACTIVE_UNIFORMS 0x8B86
-#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
-#define GL_ACTIVE_ATTRIBUTES 0x8B89
-#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
-#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
-#define GL_CURRENT_PROGRAM 0x8B8D
-
-/* StencilFunction */
-#define GL_NEVER 0x0200
-#define GL_LESS 0x0201
-#define GL_EQUAL 0x0202
-#define GL_LEQUAL 0x0203
-#define GL_GREATER 0x0204
-#define GL_NOTEQUAL 0x0205
-#define GL_GEQUAL 0x0206
-#define GL_ALWAYS 0x0207
-
-/* StencilOp */
-/* GL_ZERO */
-#define GL_KEEP 0x1E00
-#define GL_REPLACE 0x1E01
-#define GL_INCR 0x1E02
-#define GL_DECR 0x1E03
-#define GL_INVERT 0x150A
-#define GL_INCR_WRAP 0x8507
-#define GL_DECR_WRAP 0x8508
-
-/* StringName */
-#define GL_VENDOR 0x1F00
-#define GL_RENDERER 0x1F01
-#define GL_VERSION 0x1F02
-#define GL_EXTENSIONS 0x1F03
-
-/* TextureMagFilter */
-#define GL_NEAREST 0x2600
-#define GL_LINEAR 0x2601
-
-/* TextureMinFilter */
-/* GL_NEAREST */
-/* GL_LINEAR */
-#define GL_NEAREST_MIPMAP_NEAREST 0x2700
-#define GL_LINEAR_MIPMAP_NEAREST 0x2701
-#define GL_NEAREST_MIPMAP_LINEAR 0x2702
-#define GL_LINEAR_MIPMAP_LINEAR 0x2703
-
-/* TextureParameterName */
-#define GL_TEXTURE_MAG_FILTER 0x2800
-#define GL_TEXTURE_MIN_FILTER 0x2801
-#define GL_TEXTURE_WRAP_S 0x2802
-#define GL_TEXTURE_WRAP_T 0x2803
-
-/* TextureTarget */
-/* GL_TEXTURE_2D */
-#define GL_TEXTURE 0x1702
-
-#define GL_TEXTURE_CUBE_MAP 0x8513
-#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514
-#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515
-#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516
-#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517
-#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518
-#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519
-#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A
-#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C
-
-/* TextureUnit */
-#define GL_TEXTURE0 0x84C0
-#define GL_TEXTURE1 0x84C1
-#define GL_TEXTURE2 0x84C2
-#define GL_TEXTURE3 0x84C3
-#define GL_TEXTURE4 0x84C4
-#define GL_TEXTURE5 0x84C5
-#define GL_TEXTURE6 0x84C6
-#define GL_TEXTURE7 0x84C7
-#define GL_TEXTURE8 0x84C8
-#define GL_TEXTURE9 0x84C9
-#define GL_TEXTURE10 0x84CA
-#define GL_TEXTURE11 0x84CB
-#define GL_TEXTURE12 0x84CC
-#define GL_TEXTURE13 0x84CD
-#define GL_TEXTURE14 0x84CE
-#define GL_TEXTURE15 0x84CF
-#define GL_TEXTURE16 0x84D0
-#define GL_TEXTURE17 0x84D1
-#define GL_TEXTURE18 0x84D2
-#define GL_TEXTURE19 0x84D3
-#define GL_TEXTURE20 0x84D4
-#define GL_TEXTURE21 0x84D5
-#define GL_TEXTURE22 0x84D6
-#define GL_TEXTURE23 0x84D7
-#define GL_TEXTURE24 0x84D8
-#define GL_TEXTURE25 0x84D9
-#define GL_TEXTURE26 0x84DA
-#define GL_TEXTURE27 0x84DB
-#define GL_TEXTURE28 0x84DC
-#define GL_TEXTURE29 0x84DD
-#define GL_TEXTURE30 0x84DE
-#define GL_TEXTURE31 0x84DF
-#define GL_ACTIVE_TEXTURE 0x84E0
-
-/* TextureWrapMode */
-#define GL_REPEAT 0x2901
-#define GL_CLAMP_TO_EDGE 0x812F
-#define GL_MIRRORED_REPEAT 0x8370
-
-/* Uniform Types */
-#define GL_FLOAT_VEC2 0x8B50
-#define GL_FLOAT_VEC3 0x8B51
-#define GL_FLOAT_VEC4 0x8B52
-#define GL_INT_VEC2 0x8B53
-#define GL_INT_VEC3 0x8B54
-#define GL_INT_VEC4 0x8B55
-#define GL_BOOL 0x8B56
-#define GL_BOOL_VEC2 0x8B57
-#define GL_BOOL_VEC3 0x8B58
-#define GL_BOOL_VEC4 0x8B59
-#define GL_FLOAT_MAT2 0x8B5A
-#define GL_FLOAT_MAT3 0x8B5B
-#define GL_FLOAT_MAT4 0x8B5C
-#define GL_SAMPLER_2D 0x8B5E
-#define GL_SAMPLER_CUBE 0x8B60
-
-/* Vertex Arrays */
-#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
-#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
-#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
-#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
-#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
-#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
-#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F
-
-/* Read Format */
-#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A
-#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B
-
-/* Shader Source */
-#define GL_COMPILE_STATUS 0x8B81
-#define GL_INFO_LOG_LENGTH 0x8B84
-#define GL_SHADER_SOURCE_LENGTH 0x8B88
-#define GL_SHADER_COMPILER 0x8DFA
-
-/* Shader Binary */
-#define GL_SHADER_BINARY_FORMATS 0x8DF8
-#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9
-
-/* Shader Precision-Specified Types */
-#define GL_LOW_FLOAT 0x8DF0
-#define GL_MEDIUM_FLOAT 0x8DF1
-#define GL_HIGH_FLOAT 0x8DF2
-#define GL_LOW_INT 0x8DF3
-#define GL_MEDIUM_INT 0x8DF4
-#define GL_HIGH_INT 0x8DF5
-
-/* Framebuffer Object. */
-#define GL_FRAMEBUFFER 0x8D40
-#define GL_RENDERBUFFER 0x8D41
-
-#define GL_RGBA4 0x8056
-#define GL_RGB5_A1 0x8057
-#define GL_RGB565 0x8D62
-#define GL_DEPTH_COMPONENT16 0x81A5
-#define GL_STENCIL_INDEX 0x1901
-#define GL_STENCIL_INDEX8 0x8D48
-
-#define GL_RENDERBUFFER_WIDTH 0x8D42
-#define GL_RENDERBUFFER_HEIGHT 0x8D43
-#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44
-#define GL_RENDERBUFFER_RED_SIZE 0x8D50
-#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51
-#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52
-#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53
-#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54
-#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55
-
-#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0
-#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1
-#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2
-#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3
-
-#define GL_COLOR_ATTACHMENT0 0x8CE0
-#define GL_DEPTH_ATTACHMENT 0x8D00
-#define GL_STENCIL_ATTACHMENT 0x8D20
-
-#define GL_NONE 0
-
-#define GL_FRAMEBUFFER_COMPLETE 0x8CD5
-#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
-#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
-#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9
-#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
-
-#define GL_FRAMEBUFFER_BINDING 0x8CA6
-#define GL_RENDERBUFFER_BINDING 0x8CA7
-#define GL_MAX_RENDERBUFFER_SIZE 0x84E8
-
-#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
-
-#define GL_BGRA_EXT 0x80E1
-
-#ifndef GL_OES_get_program_binary
-#define GL_OES_get_program_binary 1
-#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741
-#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE
-#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF
-#endif /* GL_OES_get_program_binary */
-
-/* OpenGLES 3.0 */
-#ifndef __gl3_h_
-# define __gl3_h_ 1
-
-
-#define GL_READ_BUFFER 0x0C02
-#define GL_UNPACK_ROW_LENGTH 0x0CF2
-#define GL_UNPACK_SKIP_ROWS 0x0CF3
-#define GL_UNPACK_SKIP_PIXELS 0x0CF4
-#define GL_PACK_ROW_LENGTH 0x0D02
-#define GL_PACK_SKIP_ROWS 0x0D03
-#define GL_PACK_SKIP_PIXELS 0x0D04
-#define GL_COLOR 0x1800
-#define GL_DEPTH 0x1801
-#define GL_STENCIL 0x1802
-#define GL_RED 0x1903
-#define GL_RGB8 0x8051
-#define GL_RGBA8 0x8058
-#define GL_RGB10_A2 0x8059
-#define GL_TEXTURE_BINDING_3D 0x806A
-#define GL_UNPACK_SKIP_IMAGES 0x806D
-#define GL_UNPACK_IMAGE_HEIGHT 0x806E
-#define GL_TEXTURE_3D 0x806F
-#define GL_TEXTURE_WRAP_R 0x8072
-#define GL_MAX_3D_TEXTURE_SIZE 0x8073
-#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368
-#define GL_MAX_ELEMENTS_VERTICES 0x80E8
-#define GL_MAX_ELEMENTS_INDICES 0x80E9
-#define GL_TEXTURE_MIN_LOD 0x813A
-#define GL_TEXTURE_MAX_LOD 0x813B
-#define GL_TEXTURE_BASE_LEVEL 0x813C
-#define GL_TEXTURE_MAX_LEVEL 0x813D
-#define GL_MIN 0x8007
-#define GL_MAX 0x8008
-#define GL_DEPTH_COMPONENT24 0x81A6
-#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD
-#define GL_TEXTURE_COMPARE_MODE 0x884C
-#define GL_TEXTURE_COMPARE_FUNC 0x884D
-#define GL_CURRENT_QUERY 0x8865
-#define GL_QUERY_RESULT 0x8866
-#define GL_QUERY_RESULT_AVAILABLE 0x8867
-#define GL_BUFFER_MAPPED 0x88BC
-#define GL_BUFFER_MAP_POINTER 0x88BD
-#define GL_STREAM_READ 0x88E1
-#define GL_STREAM_COPY 0x88E2
-#define GL_STATIC_READ 0x88E5
-#define GL_STATIC_COPY 0x88E6
-#define GL_DYNAMIC_READ 0x88E9
-#define GL_DYNAMIC_COPY 0x88EA
-#define GL_MAX_DRAW_BUFFERS 0x8824
-#define GL_DRAW_BUFFER0 0x8825
-#define GL_DRAW_BUFFER1 0x8826
-#define GL_DRAW_BUFFER2 0x8827
-#define GL_DRAW_BUFFER3 0x8828
-#define GL_DRAW_BUFFER4 0x8829
-#define GL_DRAW_BUFFER5 0x882A
-#define GL_DRAW_BUFFER6 0x882B
-#define GL_DRAW_BUFFER7 0x882C
-#define GL_DRAW_BUFFER8 0x882D
-#define GL_DRAW_BUFFER9 0x882E
-#define GL_DRAW_BUFFER10 0x882F
-#define GL_DRAW_BUFFER11 0x8830
-#define GL_DRAW_BUFFER12 0x8831
-#define GL_DRAW_BUFFER13 0x8832
-#define GL_DRAW_BUFFER14 0x8833
-#define GL_DRAW_BUFFER15 0x8834
-#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
-#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
-#define GL_SAMPLER_3D 0x8B5F
-#define GL_SAMPLER_2D_SHADOW 0x8B62
-#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
-#define GL_PIXEL_PACK_BUFFER 0x88EB
-#define GL_PIXEL_UNPACK_BUFFER 0x88EC
-#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED
-#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF
-#define GL_FLOAT_MAT2x3 0x8B65
-#define GL_FLOAT_MAT2x4 0x8B66
-#define GL_FLOAT_MAT3x2 0x8B67
-#define GL_FLOAT_MAT3x4 0x8B68
-#define GL_FLOAT_MAT4x2 0x8B69
-#define GL_FLOAT_MAT4x3 0x8B6A
-#define GL_SRGB 0x8C40
-#define GL_SRGB8 0x8C41
-#define GL_SRGB8_ALPHA8 0x8C43
-#define GL_COMPARE_REF_TO_TEXTURE 0x884E
-#define GL_MAJOR_VERSION 0x821B
-#define GL_MINOR_VERSION 0x821C
-#define GL_NUM_EXTENSIONS 0x821D
-#define GL_RGBA32F 0x8814
-#define GL_RGB32F 0x8815
-#define GL_RGBA16F 0x881A
-#define GL_RGB16F 0x881B
-#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD
-#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
-#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904
-#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905
-#define GL_MAX_VARYING_COMPONENTS 0x8B4B
-#define GL_TEXTURE_2D_ARRAY 0x8C1A
-#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D
-#define GL_R11F_G11F_B10F 0x8C3A
-#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
-#define GL_RGB9_E5 0x8C3D
-#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
-#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76
-#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F
-#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80
-#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83
-#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84
-#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85
-#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88
-#define GL_RASTERIZER_DISCARD 0x8C89
-#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A
-#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B
-#define GL_INTERLEAVED_ATTRIBS 0x8C8C
-#define GL_SEPARATE_ATTRIBS 0x8C8D
-#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E
-#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F
-#define GL_RGBA32UI 0x8D70
-#define GL_RGB32UI 0x8D71
-#define GL_RGBA16UI 0x8D76
-#define GL_RGB16UI 0x8D77
-#define GL_RGBA8UI 0x8D7C
-#define GL_RGB8UI 0x8D7D
-#define GL_RGBA32I 0x8D82
-#define GL_RGB32I 0x8D83
-#define GL_RGBA16I 0x8D88
-#define GL_RGB16I 0x8D89
-#define GL_RGBA8I 0x8D8E
-#define GL_RGB8I 0x8D8F
-#define GL_RED_INTEGER 0x8D94
-#define GL_RGB_INTEGER 0x8D98
-#define GL_RGBA_INTEGER 0x8D99
-#define GL_SAMPLER_2D_ARRAY 0x8DC1
-#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
-#define GL_SAMPLER_CUBE_SHADOW 0x8DC5
-#define GL_UNSIGNED_INT_VEC2 0x8DC6
-#define GL_UNSIGNED_INT_VEC3 0x8DC7
-#define GL_UNSIGNED_INT_VEC4 0x8DC8
-#define GL_INT_SAMPLER_2D 0x8DCA
-#define GL_INT_SAMPLER_3D 0x8DCB
-#define GL_INT_SAMPLER_CUBE 0x8DCC
-#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
-#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
-#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
-#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
-#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
-#define GL_BUFFER_ACCESS_FLAGS 0x911F
-#define GL_BUFFER_MAP_LENGTH 0x9120
-#define GL_BUFFER_MAP_OFFSET 0x9121
-#define GL_DEPTH_COMPONENT32F 0x8CAC
-#define GL_DEPTH32F_STENCIL8 0x8CAD
-#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD
-#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210
-#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211
-#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212
-#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213
-#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214
-#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215
-#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216
-#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217
-#define GL_FRAMEBUFFER_DEFAULT 0x8218
-#define GL_FRAMEBUFFER_UNDEFINED 0x8219
-#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
-#define GL_DEPTH_STENCIL 0x84F9
-#define GL_UNSIGNED_INT_24_8 0x84FA
-#define GL_DEPTH24_STENCIL8 0x88F0
-#define GL_UNSIGNED_NORMALIZED 0x8C17
-#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
-#define GL_READ_FRAMEBUFFER 0x8CA8
-#define GL_DRAW_FRAMEBUFFER 0x8CA9
-#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA
-#define GL_RENDERBUFFER_SAMPLES 0x8CAB
-#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4
-#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
-#define GL_COLOR_ATTACHMENT1 0x8CE1
-#define GL_COLOR_ATTACHMENT2 0x8CE2
-#define GL_COLOR_ATTACHMENT3 0x8CE3
-#define GL_COLOR_ATTACHMENT4 0x8CE4
-#define GL_COLOR_ATTACHMENT5 0x8CE5
-#define GL_COLOR_ATTACHMENT6 0x8CE6
-#define GL_COLOR_ATTACHMENT7 0x8CE7
-#define GL_COLOR_ATTACHMENT8 0x8CE8
-#define GL_COLOR_ATTACHMENT9 0x8CE9
-#define GL_COLOR_ATTACHMENT10 0x8CEA
-#define GL_COLOR_ATTACHMENT11 0x8CEB
-#define GL_COLOR_ATTACHMENT12 0x8CEC
-#define GL_COLOR_ATTACHMENT13 0x8CED
-#define GL_COLOR_ATTACHMENT14 0x8CEE
-#define GL_COLOR_ATTACHMENT15 0x8CEF
-#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
-#define GL_MAX_SAMPLES 0x8D57
-#define GL_HALF_FLOAT 0x140B
-#define GL_MAP_READ_BIT 0x0001
-#define GL_MAP_WRITE_BIT 0x0002
-#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
-#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
-#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
-#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
-#define GL_RG 0x8227
-#define GL_RG_INTEGER 0x8228
-#define GL_R8 0x8229
-#define GL_RG8 0x822B
-#define GL_R16F 0x822D
-#define GL_R32F 0x822E
-#define GL_RG16F 0x822F
-#define GL_RG32F 0x8230
-#define GL_R8I 0x8231
-#define GL_R8UI 0x8232
-#define GL_R16I 0x8233
-#define GL_R16UI 0x8234
-#define GL_R32I 0x8235
-#define GL_R32UI 0x8236
-#define GL_RG8I 0x8237
-#define GL_RG8UI 0x8238
-#define GL_RG16I 0x8239
-#define GL_RG16UI 0x823A
-#define GL_RG32I 0x823B
-#define GL_RG32UI 0x823C
-#define GL_VERTEX_ARRAY_BINDING 0x85B5
-#define GL_R8_SNORM 0x8F94
-#define GL_RG8_SNORM 0x8F95
-#define GL_RGB8_SNORM 0x8F96
-#define GL_RGBA8_SNORM 0x8F97
-#define GL_SIGNED_NORMALIZED 0x8F9C
-#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69
-#define GL_COPY_READ_BUFFER 0x8F36
-#define GL_COPY_WRITE_BUFFER 0x8F37
-#define GL_COPY_READ_BUFFER_BINDING 0x8F36
-#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37
-#define GL_UNIFORM_BUFFER 0x8A11
-#define GL_UNIFORM_BUFFER_BINDING 0x8A28
-#define GL_UNIFORM_BUFFER_START 0x8A29
-#define GL_UNIFORM_BUFFER_SIZE 0x8A2A
-#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B
-#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D
-#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E
-#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F
-#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30
-#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31
-#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33
-#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34
-#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35
-#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36
-#define GL_UNIFORM_TYPE 0x8A37
-#define GL_UNIFORM_SIZE 0x8A38
-#define GL_UNIFORM_NAME_LENGTH 0x8A39
-#define GL_UNIFORM_BLOCK_INDEX 0x8A3A
-#define GL_UNIFORM_OFFSET 0x8A3B
-#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C
-#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D
-#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E
-#define GL_UNIFORM_BLOCK_BINDING 0x8A3F
-#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40
-#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41
-#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42
-#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43
-#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44
-#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46
-#define GL_INVALID_INDEX 0xFFFFFFFFu
-#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122
-#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125
-#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
-#define GL_OBJECT_TYPE 0x9112
-#define GL_SYNC_CONDITION 0x9113
-#define GL_SYNC_STATUS 0x9114
-#define GL_SYNC_FLAGS 0x9115
-#define GL_SYNC_FENCE 0x9116
-#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
-#define GL_UNSIGNALED 0x9118
-#define GL_SIGNALED 0x9119
-#define GL_ALREADY_SIGNALED 0x911A
-#define GL_TIMEOUT_EXPIRED 0x911B
-#define GL_CONDITION_SATISFIED 0x911C
-#define GL_WAIT_FAILED 0x911D
-#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
-#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
-#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE
-#define GL_ANY_SAMPLES_PASSED 0x8C2F
-#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A
-#define GL_SAMPLER_BINDING 0x8919
-#define GL_RGB10_A2UI 0x906F
-#define GL_TEXTURE_SWIZZLE_R 0x8E42
-#define GL_TEXTURE_SWIZZLE_G 0x8E43
-#define GL_TEXTURE_SWIZZLE_B 0x8E44
-#define GL_TEXTURE_SWIZZLE_A 0x8E45
-#define GL_GREEN 0x1904
-#define GL_BLUE 0x1905
-#define GL_INT_2_10_10_10_REV 0x8D9F
-#define GL_TRANSFORM_FEEDBACK 0x8E22
-#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23
-#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24
-#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25
-#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257
-#define GL_PROGRAM_BINARY_LENGTH 0x8741
-#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE
-#define GL_PROGRAM_BINARY_FORMATS 0x87FF
-#define GL_COMPRESSED_R11_EAC 0x9270
-#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271
-#define GL_COMPRESSED_RG11_EAC 0x9272
-#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273
-#define GL_COMPRESSED_RGB8_ETC2 0x9274
-#define GL_COMPRESSED_SRGB8_ETC2 0x9275
-#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
-#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
-#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
-#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279
-#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F
-#define GL_MAX_ELEMENT_INDEX 0x8D6B
-#define GL_NUM_SAMPLE_COUNTS 0x9380
-#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF
-
-#endif
-
-#include <stddef.h>
-
-typedef ptrdiff_t GLintptr; // Changed khronos_intptr_t
-typedef ptrdiff_t GLsizeiptr; // Changed khronos_ssize_t
-
-typedef void GLvoid;
-typedef char GLchar;
-typedef unsigned int GLenum;
-typedef unsigned char GLboolean;
-typedef unsigned int GLbitfield;
-typedef signed char GLbyte; // Changed khronos_int8_t
-typedef short GLshort;
-typedef int GLint;
-typedef int GLsizei;
-typedef unsigned char GLubyte; // Changed khronos_uint8_t
-typedef unsigned short GLushort;
-typedef unsigned int GLuint;
-typedef float GLfloat; // Changed khronos_float_t
-typedef float GLclampf; // Changed khronos_float_t
-typedef signed int GLfixed; // Changed khronos_int32_t
-
-struct _Ector_GL_API {
- // Struct is same as Evas_GL_API version 1 without extensions
-
- int init;
-
- void (*glActiveTexture) (GLenum texture);
- void (*glAttachShader) (GLuint program, GLuint shader);
- void (*glBindAttribLocation) (GLuint program, GLuint index, const char* name);
- void (*glBindBuffer) (GLenum target, GLuint buffer);
- void (*glBindFramebuffer) (GLenum target, GLuint framebuffer);
- void (*glBindRenderbuffer) (GLenum target, GLuint renderbuffer);
- void (*glBindTexture) (GLenum target, GLuint texture);
- void (*glBlendColor) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
- void (*glBlendEquation) ( GLenum mode );
- void (*glBlendEquationSeparate) (GLenum modeRGB, GLenum modeAlpha);
- void (*glBlendFunc) (GLenum sfactor, GLenum dfactor);
- void (*glBlendFuncSeparate) (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
- void (*glBufferData) (GLenum target, GLsizeiptr size, const void* data, GLenum usage);
- void (*glBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, const void* data);
- GLenum (*glCheckFramebufferStatus) (GLenum target);
- void (*glClear) (GLbitfield mask);
- void (*glClearColor) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
- void (*glClearDepthf) (GLclampf depth);
- void (*glClearStencil) (GLint s);
- void (*glColorMask) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
- void (*glCompileShader) (GLuint shader);
- void (*glCompressedTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data);
- void (*glCompressedTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data);
- void (*glCopyTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
- void (*glCopyTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
- GLuint (*glCreateProgram) (void);
- GLuint (*glCreateShader) (GLenum type);
- void (*glCullFace) (GLenum mode);
- void (*glDeleteBuffers) (GLsizei n, const GLuint* buffers);
- void (*glDeleteFramebuffers) (GLsizei n, const GLuint* framebuffers);
- void (*glDeleteProgram) (GLuint program);
- void (*glDeleteRenderbuffers) (GLsizei n, const GLuint* renderbuffers);
- void (*glDeleteShader) (GLuint shader);
- void (*glDeleteTextures) (GLsizei n, const GLuint* textures);
- void (*glDepthFunc) (GLenum func);
- void (*glDepthMask) (GLboolean flag);
- void (*glDepthRangef) (GLclampf zNear, GLclampf zFar);
- void (*glDetachShader) (GLuint program, GLuint shader);
- void (*glDisable) (GLenum cap);
- void (*glDisableVertexAttribArray) (GLuint index);
- void (*glDrawArrays) (GLenum mode, GLint first, GLsizei count);
- void (*glDrawElements) (GLenum mode, GLsizei count, GLenum type, const void* indices);
- void (*glEnable) (GLenum cap);
- void (*glEnableVertexAttribArray) (GLuint index);
- void (*glFinish) (void);
- void (*glFlush) (void);
- void (*glFramebufferRenderbuffer) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
- void (*glFramebufferTexture2D) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
- void (*glFrontFace) (GLenum mode);
- void (*glGenBuffers) (GLsizei n, GLuint* buffers);
- void (*glGenerateMipmap) (GLenum target);
- void (*glGenFramebuffers) (GLsizei n, GLuint* framebuffers);
- void (*glGenRenderbuffers) (GLsizei n, GLuint* renderbuffers);
- void (*glGenTextures) (GLsizei n, GLuint* textures);
- void (*glGetActiveAttrib) (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name);
- void (*glGetActiveUniform) (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name);
- void (*glGetAttachedShaders) (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders);
- int (*glGetAttribLocation) (GLuint program, const char* name);
- void (*glGetBooleanv) (GLenum pname, GLboolean* params);
- void (*glGetBufferParameteriv) (GLenum target, GLenum pname, GLint* params);
- GLenum (*glGetError) (void);
- void (*glGetFloatv) (GLenum pname, GLfloat* params);
- void (*glGetFramebufferAttachmentParameteriv) (GLenum target, GLenum attachment, GLenum pname, GLint* params);
- void (*glGetIntegerv) (GLenum pname, GLint* params);
- void (*glGetProgramiv) (GLuint program, GLenum pname, GLint* params);
- void (*glGetProgramInfoLog) (GLuint program, GLsizei bufsize, GLsizei* length, char* infolog);
- void (*glGetProgramBinary) (GLuint program, GLsizei bufsize, GLsizei *length, GLenum *binaryFormat, void *binary);
- void (*glGetRenderbufferParameteriv) (GLenum target, GLenum pname, GLint* params);
- void (*glGetShaderiv) (GLuint shader, GLenum pname, GLint* params);
- void (*glGetShaderInfoLog) (GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog);
- void (*glGetShaderPrecisionFormat) (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision);
- void (*glGetShaderSource) (GLuint shader, GLsizei bufsize, GLsizei* length, char* source);
- const GLubyte* (*glGetString) (GLenum name);
- void (*glGetTexParameterfv) (GLenum target, GLenum pname, GLfloat* params);
- void (*glGetTexParameteriv) (GLenum target, GLenum pname, GLint* params);
- void (*glGetUniformfv) (GLuint program, GLint location, GLfloat* params);
- void (*glGetUniformiv) (GLuint program, GLint location, GLint* params);
- int (*glGetUniformLocation) (GLuint program, const char* name);
- void (*glGetVertexAttribfv) (GLuint index, GLenum pname, GLfloat* params);
- void (*glGetVertexAttribiv) (GLuint index, GLenum pname, GLint* params);
- void (*glGetVertexAttribPointerv) (GLuint index, GLenum pname, void** pointer);
- void (*glHint) (GLenum target, GLenum mode);
- GLboolean (*glIsBuffer) (GLuint buffer);
- GLboolean (*glIsEnabled) (GLenum cap);
- GLboolean (*glIsFramebuffer) (GLuint framebuffer);
- GLboolean (*glIsProgram) (GLuint program);
- GLboolean (*glIsRenderbuffer) (GLuint renderbuffer);
- GLboolean (*glIsShader) (GLuint shader);
- GLboolean (*glIsTexture) (GLuint texture);
- void (*glLineWidth) (GLfloat width);
- void (*glLinkProgram) (GLuint program);
- void (*glPixelStorei) (GLenum pname, GLint param);
- void (*glPolygonOffset) (GLfloat factor, GLfloat units);
- void (*glProgramBinary) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
- void (*glProgramParameteri) (GLuint program, GLenum pname, GLint value);
- void (*glReadPixels) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels);
- void (*glReleaseShaderCompiler) (void);
- void (*glRenderbufferStorage) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
- void (*glSampleCoverage) (GLclampf value, GLboolean invert);
- void (*glScissor) (GLint x, GLint y, GLsizei width, GLsizei height);
- void (*glShaderBinary) (GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length);
- void (*glShaderSource) (GLuint shader, GLsizei count, const char* const * string, const GLint* length);
- void (*glStencilFunc) (GLenum func, GLint ref, GLuint mask);
- void (*glStencilFuncSeparate) (GLenum face, GLenum func, GLint ref, GLuint mask);
- void (*glStencilMask) (GLuint mask);
- void (*glStencilMaskSeparate) (GLenum face, GLuint mask);
- void (*glStencilOp) (GLenum fail, GLenum zfail, GLenum zpass);
- void (*glStencilOpSeparate) (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
- void (*glTexImage2D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels);
- void (*glTexParameterf) (GLenum target, GLenum pname, GLfloat param);
- void (*glTexParameterfv) (GLenum target, GLenum pname, const GLfloat* params);
- void (*glTexParameteri) (GLenum target, GLenum pname, GLint param);
- void (*glTexParameteriv) (GLenum target, GLenum pname, const GLint* params);
- void (*glTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
- void (*glUniform1f) (GLint location, GLfloat x);
- void (*glUniform1fv) (GLint location, GLsizei count, const GLfloat* v);
- void (*glUniform1i) (GLint location, GLint x);
- void (*glUniform1iv) (GLint location, GLsizei count, const GLint* v);
- void (*glUniform2f) (GLint location, GLfloat x, GLfloat y);
- void (*glUniform2fv) (GLint location, GLsizei count, const GLfloat* v);
- void (*glUniform2i) (GLint location, GLint x, GLint y);
- void (*glUniform2iv) (GLint location, GLsizei count, const GLint* v);
- void (*glUniform3f) (GLint location, GLfloat x, GLfloat y, GLfloat z);
- void (*glUniform3fv) (GLint location, GLsizei count, const GLfloat* v);
- void (*glUniform3i) (GLint location, GLint x, GLint y, GLint z);
- void (*glUniform3iv) (GLint location, GLsizei count, const GLint* v);
- void (*glUniform4f) (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
- void (*glUniform4fv) (GLint location, GLsizei count, const GLfloat* v);
- void (*glUniform4i) (GLint location, GLint x, GLint y, GLint z, GLint w);
- void (*glUniform4iv) (GLint location, GLsizei count, const GLint* v);
- void (*glUniformMatrix2fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
- void (*glUniformMatrix3fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
- void (*glUniformMatrix4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value);
- void (*glUseProgram) (GLuint program);
- void (*glValidateProgram) (GLuint program);
- void (*glVertexAttrib1f) (GLuint indx, GLfloat x);
- void (*glVertexAttrib1fv) (GLuint indx, const GLfloat* values);
- void (*glVertexAttrib2f) (GLuint indx, GLfloat x, GLfloat y);
- void (*glVertexAttrib2fv) (GLuint indx, const GLfloat* values);
- void (*glVertexAttrib3f) (GLuint indx, GLfloat x, GLfloat y, GLfloat z);
- void (*glVertexAttrib3fv) (GLuint indx, const GLfloat* values);
- void (*glVertexAttrib4f) (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
- void (*glVertexAttrib4fv) (GLuint indx, const GLfloat* values);
- void (*glVertexAttribPointer) (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr);
- void (*glViewport) (GLint x, GLint y, GLsizei width, GLsizei height);
-};
-
-#endif
#include <Ector.h>
#include "ector_private.h"
-Ector_GL_API GL;
int _ector_log_dom_global = 0;
static int _ector_main_count = 0;
_ector_main_count = 1;
eina_log_timing(_ector_log_dom_global, EINA_LOG_STATE_STOP, EINA_LOG_STATE_INIT);
- GL.init = 0;
return _ector_main_count;
return 0;
}
-static void
-donothing(void)
-{
-}
-
-EAPI Eina_Bool
-ector_glsym_set(void *(*glsym)(void *lib, const char *name), void *lib)
-{
- Eina_Bool r = EINA_TRUE;
-
- if (!glsym) return EINA_FALSE;
-
-#define ORD(a) do { GL.a = glsym(lib, #a); if (!GL.a) { GL.a = (void*) donothing; r = EINA_FALSE; } } while (0)
-
- ORD(glActiveTexture);
- ORD(glAttachShader);
- ORD(glBindAttribLocation);
- ORD(glBindBuffer);
- ORD(glBindFramebuffer);
- ORD(glBindRenderbuffer);
- ORD(glBindTexture);
- ORD(glBlendColor);
- ORD(glBlendEquation);
- ORD(glBlendEquationSeparate);
- ORD(glBlendFunc);
- ORD(glBlendFuncSeparate);
- ORD(glBufferData);
- ORD(glBufferSubData);
- ORD(glCheckFramebufferStatus);
- ORD(glClear);
- ORD(glClearColor);
- ORD(glClearDepthf);
- ORD(glClearStencil);
- ORD(glColorMask);
- ORD(glCompileShader);
- ORD(glCompressedTexImage2D);
- ORD(glCompressedTexSubImage2D);
- ORD(glCopyTexImage2D);
- ORD(glCopyTexSubImage2D);
- ORD(glCreateProgram);
- ORD(glCreateShader);
- ORD(glCullFace);
- ORD(glDeleteBuffers);
- ORD(glDeleteFramebuffers);
- ORD(glDeleteProgram);
- ORD(glDeleteRenderbuffers);
- ORD(glDeleteShader);
- ORD(glDeleteTextures);
- ORD(glDepthFunc);
- ORD(glDepthMask);
- ORD(glDepthRangef);
- ORD(glDetachShader);
- ORD(glDisable);
- ORD(glDisableVertexAttribArray);
- ORD(glDrawArrays);
- ORD(glDrawElements);
- ORD(glEnable);
- ORD(glEnableVertexAttribArray);
- ORD(glFinish);
- ORD(glFlush);
- ORD(glFramebufferRenderbuffer);
- ORD(glFramebufferTexture2D);
- ORD(glFrontFace);
- ORD(glGenBuffers);
- ORD(glGenerateMipmap);
- ORD(glGenFramebuffers);
- ORD(glGenRenderbuffers);
- ORD(glGenTextures);
- ORD(glGetActiveAttrib);
- ORD(glGetActiveUniform);
- ORD(glGetAttachedShaders);
- ORD(glGetAttribLocation);
- ORD(glGetBooleanv);
- ORD(glGetBufferParameteriv);
- ORD(glGetError);
- ORD(glGetFloatv);
- ORD(glGetFramebufferAttachmentParameteriv);
- ORD(glGetIntegerv);
- ORD(glGetProgramiv);
- ORD(glGetProgramInfoLog);
- ORD(glGetProgramBinary);
- ORD(glGetRenderbufferParameteriv);
- ORD(glGetShaderiv);
- ORD(glGetShaderInfoLog);
- ORD(glGetShaderPrecisionFormat);
- ORD(glGetShaderSource);
- ORD(glGetString);
- ORD(glGetTexParameterfv);
- ORD(glGetTexParameteriv);
- ORD(glGetUniformfv);
- ORD(glGetUniformiv);
- ORD(glGetUniformLocation);
- ORD(glGetVertexAttribfv);
- ORD(glGetVertexAttribiv);
- ORD(glGetVertexAttribPointerv);
- ORD(glHint);
- ORD(glIsBuffer);
- ORD(glIsEnabled);
- ORD(glIsFramebuffer);
- ORD(glIsProgram);
- ORD(glIsRenderbuffer);
- ORD(glIsShader);
- ORD(glIsTexture);
- ORD(glLineWidth);
- ORD(glLinkProgram);
- ORD(glPixelStorei);
- ORD(glPolygonOffset);
- ORD(glProgramBinary);
- ORD(glProgramParameteri);
- ORD(glReadPixels);
- ORD(glReleaseShaderCompiler);
- ORD(glRenderbufferStorage);
- ORD(glSampleCoverage);
- ORD(glScissor);
- ORD(glShaderBinary);
- ORD(glShaderSource);
- ORD(glStencilFunc);
- ORD(glStencilFuncSeparate);
- ORD(glStencilMask);
- ORD(glStencilMaskSeparate);
- ORD(glStencilOp);
- ORD(glStencilOpSeparate);
- ORD(glTexImage2D);
- ORD(glTexParameterf);
- ORD(glTexParameterfv);
- ORD(glTexParameteri);
- ORD(glTexParameteriv);
- ORD(glTexSubImage2D);
- ORD(glUniform1f);
- ORD(glUniform1fv);
- ORD(glUniform1i);
- ORD(glUniform1iv);
- ORD(glUniform2f);
- ORD(glUniform2fv);
- ORD(glUniform2i);
- ORD(glUniform2iv);
- ORD(glUniform3f);
- ORD(glUniform3fv);
- ORD(glUniform3i);
- ORD(glUniform3iv);
- ORD(glUniform4f);
- ORD(glUniform4fv);
- ORD(glUniform4i);
- ORD(glUniform4iv);
- ORD(glUniformMatrix2fv);
- ORD(glUniformMatrix3fv);
- ORD(glUniformMatrix4fv);
- ORD(glUseProgram);
- ORD(glValidateProgram);
- ORD(glVertexAttrib1f);
- ORD(glVertexAttrib1fv);
- ORD(glVertexAttrib2f);
- ORD(glVertexAttrib2fv);
- ORD(glVertexAttrib3f);
- ORD(glVertexAttrib3fv);
- ORD(glVertexAttrib4f);
- ORD(glVertexAttrib4fv);
- ORD(glVertexAttribPointer);
- ORD(glViewport);
-
- GL.init = r;
- return r;
-}
EAPI int
ector_shutdown(void)
if (EINA_LIKELY(_ector_main_count > 0))
return _ector_main_count;
- GL.init = 0;
eina_log_timing(_ector_log_dom_global,
EINA_LOG_STATE_START,
EINA_LOG_STATE_SHUTDOWN);
#include "Ector.h"
-#include "ector_gl_internal.h"
-
/*
* variable and macros used for the eina_log module
*/
/* The following macro are internal to Ector only at this stage */
-typedef struct _Ector_Renderer_Data Ector_Renderer_Data;
-typedef struct _Ector_Renderer_Gradient_Data Ector_Renderer_Gradient_Data;
-typedef struct _Ector_Renderer_Gradient_Linear_Data Ector_Renderer_Gradient_Linear_Data;
-typedef struct _Ector_Renderer_Gradient_Radial_Data Ector_Renderer_Gradient_Radial_Data;
-typedef struct _Ector_Renderer_Shape_Data Ector_Renderer_Shape_Data;
-typedef struct _Ector_Renderer_Image_Data Ector_Renderer_Image_Data;
typedef struct _Ector_Renderer_Buffer_Data Ector_Renderer_Buffer_Data;
-struct _Ector_Renderer_Data
-{
- Ector_Surface *surface;
- Eina_Matrix3 *m;
-
- struct {
- double x;
- double y;
- } origin;
-
- struct {
- int r, g, b, a;
- } color;
-
- Eina_Bool visibility : 1;
- Eina_Bool finalized : 1;
-};
-
-struct _Ector_Renderer_Gradient_Data
-{
- Efl_Gfx_Gradient_Stop *colors;
- unsigned int colors_count;
-
- Efl_Gfx_Gradient_Spread s;
-};
-
-struct _Ector_Renderer_Gradient_Linear_Data
-{
- struct {
- double x, y;
- } start, end;
-};
-
-struct _Ector_Renderer_Gradient_Radial_Data
-{
- struct {
- double x, y;
- } radial, focal;
- double radius;
-};
-
-struct _Ector_Renderer_Shape_Data
-{
- Ector_Renderer *fill;
- struct {
- Ector_Renderer *fill;
- Ector_Renderer *marker;
- } stroke;
-};
-
-struct _Ector_Renderer_Image_Data
-{
- Ector_Buffer *buffer;
-};
struct _Ector_Renderer_Buffer_Data
{
} fill;
};
-static inline unsigned int
-_renderer_crc_get(Eo *obj, unsigned int crc)
-{
- unsigned int id;
-
- id = ector_renderer_crc_get(obj);
- crc = eina_crc((void*) &id, sizeof (id), crc, EINA_FALSE);
- return crc;
-}
-
#include "ector_buffer.h"
#endif
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "ector_private.h"
-
-#define MY_CLASS ECTOR_RENDERER_CLASS
-
-static void
-_ector_renderer_efl_object_destructor(Eo *obj, Ector_Renderer_Data *pd)
-{
- efl_destructor(efl_super(obj, MY_CLASS));
-
- if (pd->m) free(pd->m);
- /*FIXME: pd-> surface will try efl_xref whenever surface_set is called.
- desturctor is called from a subclass, ref and unref do not match.
- So, Add this condition temporarily.*/
- if (efl_ref_count(pd->surface) > 0)
- efl_unref(pd->surface);
-}
-
-static Efl_Object *
-_ector_renderer_efl_object_finalize(Eo *obj, Ector_Renderer_Data *pd)
-{
- if (!pd->surface)
- {
- CRI("surface is not set yet, go fix your code!");
- return NULL;
- }
- pd->finalized = EINA_TRUE;
- return efl_finalize(efl_super(obj, MY_CLASS));
-}
-
-static Ector_Surface *
-_ector_renderer_surface_get(const Eo *obj EINA_UNUSED, Ector_Renderer_Data *pd)
-{
- return pd->surface;
-}
-
-static void
-_ector_renderer_surface_set(Eo *obj EINA_UNUSED, Ector_Renderer_Data *pd, Ector_Surface *s)
-{
- if (pd->finalized)
- {
- CRI("surface_set can be called during object creation only!");
- return;
- }
- pd->surface = efl_xref(s, obj);
-}
-
-static void
-_ector_renderer_transformation_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd,
- const Eina_Matrix3 *m)
-{
- if (!m)
- {
- free(pd->m);
- pd->m = NULL;
- }
- else
- {
- if (!pd->m) pd->m = malloc(sizeof (Eina_Matrix3));
- if (!pd->m) return;
- memcpy(pd->m, m, sizeof (Eina_Matrix3));
- }
-}
-
-static const Eina_Matrix3 *
-_ector_renderer_transformation_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd)
-{
- return pd->m;
-}
-
-static void
-_ector_renderer_origin_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd,
- double x, double y)
-{
- pd->origin.x = x;
- pd->origin.y = y;
-}
-
-static void
-_ector_renderer_origin_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd,
- double *x, double *y)
-{
- if (x) *x = pd->origin.x;
- if (y) *y = pd->origin.y;
-}
-
-static void
-_ector_renderer_visibility_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd,
- Eina_Bool v)
-{
- pd->visibility = v;
-}
-
-static Eina_Bool
-_ector_renderer_visibility_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd)
-{
- return pd->visibility;
-}
-
-static void
-_ector_renderer_color_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd,
- int r, int g, int b, int a)
-{
- pd->color.r = r;
- pd->color.g = g;
- pd->color.b = b;
- pd->color.a = a;
-}
-
-static void
-_ector_renderer_color_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd,
- int *r, int *g, int *b, int *a)
-{
- if (r) *r = pd->color.r;
- if (g) *g = pd->color.g;
- if (b) *b = pd->color.b;
- if (a) *a = pd->color.a;
-}
-
-static unsigned int
-_ector_renderer_crc_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd)
-{
- unsigned int crc;
-
- crc = eina_crc((void*) &pd->color, sizeof(pd->color), 0xffffffff, EINA_TRUE);
- crc = eina_crc((void*) &pd->origin, sizeof(pd->origin), crc, EINA_FALSE);
-
- if (pd->m) crc = eina_crc((void*) pd->m, sizeof(Eina_Matrix3), crc, EINA_FALSE);
-
- return crc;
-}
-
-static void
-_ector_renderer_comp_method_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Data *pd EINA_UNUSED,
- Ector_Buffer *comp EINA_UNUSED,
- Efl_Gfx_Vg_Composite_Method method EINA_UNUSED)
-{
-}
-
-#include "ector_renderer.eo.c"
+++ /dev/null
-import eina_types;
-
-abstract @beta Ector.Renderer extends Efl.Object
-{
- [[Ector renderer abstract interface]]
-
- c_prefix: ector_renderer;
- methods {
- @property surface {
- [[Surface associated with this renderer]]
- set {
- [[Do not use.]]
- }
- get {
- [[Gets the surface associated with this renderer. Can not be set.]]
- }
- values {
- s: Ector.Surface; [[Associated surface]]
- }
- }
- @property transformation {
- [[Transformation property]]
- set {
- }
- get {
- }
- values {
- m: ptr(const(Eina.Matrix3)); [[Transformation matrix]]
- }
- }
- @property origin {
- [[Renderer origin]]
- set {
- }
- get {
- }
- values {
- x: double; [[X coordinate]]
- y: double; [[Y coordinate]]
- }
- }
- @property visibility {
- [[The given Ector renderer can be visible or invisible.]]
- set {
- }
- get {
- }
- values {
- v: bool; [[$true to make the object visible, $false otherwise]]
- }
- }
- @property color {
- [[Retrieves the general/main color of the given Ector renderer.
-
- Retrieves the main color's RGB component (and alpha channel)
- values, which range from 0 to 255. For the alpha channel,
- which defines the object's transparency level, 0 means totally
- transparent, while 255 means opaque. These color values are
- premultiplied by the alpha value.
-
- Use null pointers on the components you're not interested in,
- they'll be ignored by the function.
- ]]
- set {
- }
- get {
- }
- values {
- r: int; [[The red component of the given color.]]
- g: int; [[The green component of the given color.]]
- b: int; [[The blue component of the given color.]]
- a: int; [[The alpha component of the given color.]]
- }
- }
- @property crc {
- [[Cyclic redundancy check]]
- get {
- return: uint; [[CRC value]]
- }
- }
- @property comp_method {
- [[Set Composite Buffer to this Renderer]]
- set {
- }
- values {
- comp: Ector.Buffer; [[Composite Buffer]]
- method: Efl.Gfx.Vg_Composite_Method; [[Composite method]]
- }
- }
- draw @pure_virtual {
- [[Actual draw operation]]
- return: bool; [[$true on success, $false otherwise]]
- params {
- @in op: Efl.Gfx.Render_Op; [[Renderer operation]]
- @in clips: array<Eina.Rect>; [[Array of @Eina.Rect clip]]
- @in mul_col: uint; [[Premultiplied color]]
- }
- }
- prepare @pure_virtual {
- [[Prepare for rendering]]
- return: bool; [[$true on success, $false otherwise]]
- }
- }
- implements {
- Efl.Object.destructor;
- Efl.Object.finalize;
- }
-}
+++ /dev/null
-#ifndef ECTOR_RENDERER_H
-#define ECTOR_RENDERER_H
-
-#include "ector_renderer.eo.h"
-#include "ector_renderer_shape.eo.h"
-#include "ector_renderer_image.eo.h"
-#include "ector_renderer_gradient.eo.h"
-#include "ector_renderer_gradient_linear.eo.h"
-#include "ector_renderer_gradient_radial.eo.h"
-
-#endif
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "ector_private.h"
-
-#define MY_CLASS ECTOR_RENDERER_GRADIENT_MIXIN
-
-static void
-_ector_renderer_gradient_efl_gfx_gradient_stop_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Data *pd,
- const Efl_Gfx_Gradient_Stop *colors,
- unsigned int length)
-{
- pd->colors = realloc(pd->colors, length * sizeof(Efl_Gfx_Gradient_Stop));
- if (!pd->colors)
- {
- pd->colors_count = 0;
- return ;
- }
-
- memcpy(pd->colors, colors, length * sizeof(Efl_Gfx_Gradient_Stop));
- pd->colors_count = length;
-}
-
-static void
-_ector_renderer_gradient_efl_gfx_gradient_stop_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Data *pd,
- const Efl_Gfx_Gradient_Stop **colors,
- unsigned int *length)
-{
- if (colors) *colors = pd->colors;
- if (length) *length = pd->colors_count;
-}
-
-static void
-_ector_renderer_gradient_efl_gfx_gradient_spread_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Data *pd,
- Efl_Gfx_Gradient_Spread s)
-{
- pd->s = s;
-}
-
-static Efl_Gfx_Gradient_Spread
-_ector_renderer_gradient_efl_gfx_gradient_spread_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Data *pd)
-{
- return pd->s;
-}
-
-static void
-_ector_renderer_gradient_efl_object_invalidate(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Data *pd)
-{
- if (pd->colors) free(pd->colors);
-}
-
-#include "ector_renderer_gradient.eo.c"
+++ /dev/null
-mixin @beta Ector.Renderer.Gradient requires Efl.Object extends Efl.Gfx.Gradient
-{
- [[Ector gradient renderer mixin]]
- c_prefix: ector_renderer_gradient;
- implements {
- Efl.Gfx.Gradient.stop { get; set; }
- Efl.Gfx.Gradient.spread { get; set; }
- Efl.Object.invalidate;
- }
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "ector_private.h"
-
-static void
-_ector_renderer_gradient_linear_efl_gfx_gradient_linear_start_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Linear_Data *pd,
- double x, double y)
-{
- pd->start.x = x;
- pd->start.y = y;
-}
-
-static void
-_ector_renderer_gradient_linear_efl_gfx_gradient_linear_start_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Linear_Data *pd,
- double *x, double *y)
-{
- if (x) *x = pd->start.x;
- if (y) *y = pd->start.y;
-}
-
-static void
-_ector_renderer_gradient_linear_efl_gfx_gradient_linear_end_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Linear_Data *pd,
- double x, double y)
-{
- pd->end.x = x;
- pd->end.y = y;
-}
-
-static void
-_ector_renderer_gradient_linear_efl_gfx_gradient_linear_end_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Linear_Data *pd,
- double *x, double *y)
-{
- if (x) *x = pd->end.x;
- if (y) *y = pd->end.y;
-}
-
-#include "ector_renderer_gradient_linear.eo.c"
+++ /dev/null
-mixin @beta Ector.Renderer.Gradient.Linear extends Efl.Gfx.Gradient_Linear
-{
- [[Ector gradient linear renderer mixin]]
- c_prefix: ector_renderer_gradient_linear;
- implements {
- Efl.Gfx.Gradient_Linear.start { get; set; }
- Efl.Gfx.Gradient_Linear.end { get; set; }
- }
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "ector_private.h"
-
-static void
-_ector_renderer_gradient_radial_efl_gfx_gradient_radial_center_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Radial_Data *pd,
- double x, double y)
-{
- pd->radial.x = x;
- pd->radial.y = y;
-}
-
-static void
-_ector_renderer_gradient_radial_efl_gfx_gradient_radial_center_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Radial_Data *pd,
- double *x, double *y)
-{
- if (x) *x = pd->radial.x;
- if (y) *y = pd->radial.y;
-}
-
-static void
-_ector_renderer_gradient_radial_efl_gfx_gradient_radial_radius_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Radial_Data *pd,
- double r)
-{
- pd->radius = r;
-}
-
-static double
-_ector_renderer_gradient_radial_efl_gfx_gradient_radial_radius_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Radial_Data *pd)
-{
- return pd->radius;
-}
-
-
-static void
-_ector_renderer_gradient_radial_efl_gfx_gradient_radial_focal_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Radial_Data *pd,
- double x, double y)
-{
- pd->focal.x = x;
- pd->focal.y = y;
-}
-
-static void
-_ector_renderer_gradient_radial_efl_gfx_gradient_radial_focal_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Radial_Data *pd,
- double *x, double *y)
-{
- if (x) *x = pd->focal.x;
- if (y) *y = pd->focal.y;
-}
-
-#include "ector_renderer_gradient_radial.eo.c"
+++ /dev/null
-mixin @beta Ector.Renderer.Gradient.Radial extends Efl.Gfx.Gradient_Radial
-{
- [[Ector gradient radial renderer mixin]]
- c_prefix: ector_renderer_gradient_radial;
- implements {
- Efl.Gfx.Gradient_Radial.center { get; set; }
- Efl.Gfx.Gradient_Radial.radius { get; set; }
- Efl.Gfx.Gradient_Radial.focal { get; set; }
- }
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "ector_private.h"
-
-#define MY_CLASS ECTOR_RENDERER_IMAGE_MIXIN
-
-
-static void
-_ector_renderer_image_buffer_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Image_Data *pd,
- Ector_Buffer *buffer)
-{
- pd->buffer = buffer;
-}
-
-
-#include "ector_renderer_image.eo.c"
+++ /dev/null
-mixin @beta Ector.Renderer.Image
-{
- [[Ector image renderer mixin]]
- c_prefix: ector_renderer_image;
- methods {
- @property buffer {
- set {
- }
- values {
- buffer : Ector.Buffer; [[Image buffer]]
- }
- }
- }
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "ector_private.h"
-
-#define MY_CLASS ECTOR_RENDERER_SHAPE_MIXIN
-
-static void
-_ector_renderer_shape_fill_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Shape_Data *pd,
- const Ector_Renderer *r)
-{
- efl_replace(&pd->fill, r);
-}
-
-static const Ector_Renderer *
-_ector_renderer_shape_fill_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Shape_Data *pd)
-{
- return pd->fill;
-}
-
-static void
-_ector_renderer_shape_stroke_fill_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Shape_Data *pd,
- const Ector_Renderer *r)
-{
- efl_replace(&pd->stroke.fill, r);
-}
-
-static const Ector_Renderer *
-_ector_renderer_shape_stroke_fill_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Shape_Data *pd)
-{
- return pd->stroke.fill;
-}
-
-static void
-_ector_renderer_shape_stroke_marker_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Shape_Data *pd,
- const Ector_Renderer *r)
-{
- efl_replace(&pd->stroke.marker, r);
-}
-
-static const Ector_Renderer *
-_ector_renderer_shape_stroke_marker_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Shape_Data *pd)
-{
- return pd->stroke.marker;
-}
-
-static void
-_ector_renderer_shape_efl_object_invalidate(Eo *obj EINA_UNUSED,
- Ector_Renderer_Shape_Data *pd)
-{
- efl_replace(&pd->fill, NULL);
- efl_replace(&pd->stroke.fill, NULL);
- efl_replace(&pd->stroke.marker, NULL);
-}
-
-
-#include "ector_renderer_shape.eo.c"
+++ /dev/null
-import ector_renderer;
-
-mixin @beta Ector.Renderer.Shape requires Efl.Object extends Efl.Gfx.Shape
-{
- [[Ector shape renderer mixin]]
- c_prefix: ector_renderer_shape;
- methods {
- @property fill {
- [[Fill property]]
- set {
- }
- get {
- }
- values {
- r: const(Ector.Renderer); [[Ector fill renderer]]
- }
- }
- @property stroke_fill {
- [[Stroke fill property]]
- set {
- }
- get {
- }
- values {
- r: const(Ector.Renderer); [[Ector stroke fill renderer]]
- }
- }
- @property stroke_marker {
- [[Stroke marker property]]
- set {
- }
- get {
- }
- values {
- r: const(Ector.Renderer); [[Ector stroke marker renderer]]
- }
- }
- }
- implements {
- Efl.Object.invalidate;
- }
-}
+++ /dev/null
-mixin @beta Ector.Surface extends Ector.Buffer
-{
- [[Surface interface for Ector]]
-
- c_prefix: ector_surface;
- data: null;
- methods {
- @property reference_point @pure_virtual {
- [[This defines where (0,0) is in pixel coordinates inside the surface]]
- set {}
- get {}
- values {
- x: int; [[X coordinate for reference point]]
- y: int; [[Y coordinate for reference point]]
- }
- }
- renderer_factory_new @pure_virtual {
- [[Create a new renderer factory for the given type]]
- return: Efl.Object; [[Renderer factory object]] /* FIXME: Should be a more restricted type, only here for cyclic. */
- params {
- @in type: const(Efl.Class); [[Efl class]] /* FIXME: Should probably be a more restricted type */
- }
- }
- draw_image @pure_virtual {
- [[ Draw image's buffer to surface buffer. ]]
- params {
- @in image: Ector.Buffer; [[Image buffer]]
- @in x: int; [[Buffer position x]]
- @in y: int; [[Buffer position y]]
- @in alpha: int; [[Buffer alpha value]]
- }
- return: bool; [[True if drawing was successful]]
- }
- }
-}
+++ /dev/null
-#ifndef ECTOR_SURFACE_H
-#define ECTOR_SURFACE_H
-
-#include "ector_buffer.h"
-#include "ector_surface.eo.h"
-
-#endif
+++ /dev/null
-#ifndef ECTOR_UTIL_H
-# define ECTOR_UTIL_H
-
-static inline void
-ector_color_argb_premul(int a, int *r, int *g, int *b)
-{
- a++;
- if (r) { *r = (a * *r) >> 8; }
- if (g) { *g = (a * *g) >> 8; }
- if (b) { *b = (a * *b) >> 8; }
-}
-
-static inline void
-ector_color_argb_unpremul(int a, int *r, int *g, int *b)
-{
- if (!a) return;
- if (r) { *r = (255 * *r) / a; }
- if (g) { *g = (255 * *g) / a; }
- if (b) { *b = (255 * *b) / a; }
-}
-
-
-static inline unsigned int
-ector_color_multiply(unsigned int c1, unsigned int c2)
-{
- return ( ((((((c1) >> 16) & 0xff00) * (((c2) >> 16) & 0xff00)) + 0xff0000) & 0xff000000) +
- ((((((c1) >> 8) & 0xff00) * (((c2) >> 16) & 0xff)) + 0xff00) & 0xff0000) +
- ((((((c1) & 0xff00) * ((c2) & 0xff00)) + 0xff0000) >> 16) & 0xff00) +
- (((((c1) & 0xff) * ((c2) & 0xff)) + 0xff) >> 8) );
-}
-
-#endif
typedef short GLshort;
#include "gl/ector_gl_buffer.eo.h"
-#include "gl/ector_gl_surface.eo.h"
-#include "gl/ector_renderer_gl.eo.h"
-#include "gl/ector_renderer_gl_shape.eo.h"
-#include "gl/ector_renderer_gl_gradient_linear.eo.h"
-#include "gl/ector_renderer_gl_gradient_radial.eo.h"
#endif
#include "ector_private.h"
-#define SHADER_FLAG_SAM_BITSHIFT 3
-#define SHADER_FLAG_MASKSAM_BITSHIFT 6
-
-typedef enum {
- SHADER_FLAG_TEX = (1 << 0),
- SHADER_FLAG_BGRA = (1 << 1),
- SHADER_FLAG_MASK = (1 << 2),
- SHADER_FLAG_SAM12 = (1 << (SHADER_FLAG_SAM_BITSHIFT + 0)),
- SHADER_FLAG_SAM21 = (1 << (SHADER_FLAG_SAM_BITSHIFT + 1)),
- SHADER_FLAG_SAM22 = (1 << (SHADER_FLAG_SAM_BITSHIFT + 2)),
- SHADER_FLAG_MASKSAM12 = (1 << (SHADER_FLAG_MASKSAM_BITSHIFT + 0)),
- SHADER_FLAG_MASKSAM21 = (1 << (SHADER_FLAG_MASKSAM_BITSHIFT + 1)),
- SHADER_FLAG_MASKSAM22 = (1 << (SHADER_FLAG_MASKSAM_BITSHIFT + 2)),
- SHADER_FLAG_IMG = (1 << 9),
- SHADER_FLAG_BIGENDIAN = (1 << 10),
- SHADER_FLAG_YUV = (1 << 11),
- SHADER_FLAG_YUY2 = (1 << 12),
- SHADER_FLAG_NV12 = (1 << 13),
- SHADER_FLAG_YUV_709 = (1 << 14),
- SHADER_FLAG_EXTERNAL = (1 << 15),
- SHADER_FLAG_AFILL = (1 << 16),
- SHADER_FLAG_NOMUL = (1 << 17),
- SHADER_FLAG_ALPHA = (1 << 18),
- SHADER_FLAG_RGB_A_PAIR = (1 << 19),
-} Shader_Flag;
-#define SHADER_FLAG_COUNT 20
-
-#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
-
-static inline void
-gl_compile_link_error(GLuint target, const char *action, Eina_Bool is_shader)
-{
- int loglen = 0, chars = 0;
- char *logtxt;
-
- if (is_shader)
- /* Shader info log */
- GL.glGetShaderiv(target, GL_INFO_LOG_LENGTH, &loglen);
- else
- /* Program info log */
- GL.glGetProgramiv(target, GL_INFO_LOG_LENGTH, &loglen);
-
- if (loglen > 0)
- {
- logtxt = calloc(loglen, sizeof(char));
- if (logtxt)
- {
- if (is_shader) GL.glGetShaderInfoLog(target, loglen, &chars, logtxt);
- else GL.glGetProgramInfoLog(target, loglen, &chars, logtxt);
- ERR("Failed to %s: %s", action, logtxt);
- free(logtxt);
- }
- }
-}
-
-GLuint ector_gl_shader_compile(uint64_t flags);
-
#endif
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "gl/Ector_GL.h"
-#include "ector_private.h"
-#include "ector_gl_private.h"
-
-#include "shader/ector_gl_shaders.x"
-
-static const char *_shader_flags[SHADER_FLAG_COUNT] = {
- "TEX",
- "BGRA",
- "MASK",
- "SAM12",
- "SAM21",
- "SAM22",
- "MASKSAM12",
- "MASKSAM21",
- "MASKSAM22",
- "IMG",
- "BIGENDIAN",
- "YUV",
- "YUY2",
- "NV12",
- "YUV_709",
- "EXTERNAL",
- "AFILL",
- "NOMUL",
- "ALPHA",
- "RGB_A_PAIR"
-};
-
-static Eina_Strbuf *
-_ector_gl_shader_glsl_get(uint64_t flags, const char *base)
-{
- Eina_Strbuf *r;
- unsigned int k;
-
- r = eina_strbuf_new();
- for (k =0; k < SHADER_FLAG_COUNT; k++)
- {
- if (flags & (1 << k))
- eina_strbuf_append_printf(r, "#define SHD_%s\n", _shader_flags[k]);
- }
-
- eina_strbuf_append(r, base);
-
- return r;
-}
-
-static GLint
-_ector_gl_shader_glsl_compile(GLuint s, const Eina_Strbuf *shader, const char *type)
-{
- const char *str;
- GLint ok = 0;
-
- str = eina_strbuf_string_get(shader);
-
- GL.glShaderSource(s, 1, &str, NULL);
- GL.glCompileShader(s);
- GL.glGetShaderiv(s, GL_COMPILE_STATUS, &ok);
- if (!ok)
- {
- Eina_Strbuf *err;
-
- err = eina_strbuf_new();
- if (!err) goto on_error;
- eina_strbuf_append_printf(err, "compile of %s shader", type);
-
- gl_compile_link_error(s, eina_strbuf_string_get(err), EINA_TRUE);
- ERR("Abort %s:\n%s", eina_strbuf_string_get(err), str);
-
- eina_strbuf_free(err);
- }
-
- on_error:
- return ok;
-}
-
-static GLint
-_ector_gl_shader_glsl_link(uint64_t flags,
- const Eina_Strbuf *vertex,
- const Eina_Strbuf *fragment)
-{
- GLuint vtx = 0, frg = 0, prg = 0;
- GLint ok = 0;
-
- vtx = GL.glCreateShader(GL_VERTEX_SHADER);
- frg = GL.glCreateShader(GL_FRAGMENT_SHADER);
-
- // Compiling vertex shader
- ok = _ector_gl_shader_glsl_compile(vtx, vertex, "vertex");
- if (!ok) goto on_error;
-
- // Compile fragment shader
- ok = _ector_gl_shader_glsl_compile(frg, fragment, "fragment");
- if (!ok) goto on_error;
-
- // Link both shader together
- ok = 0;
-
- prg = GL.glCreateProgram();
-#ifndef GL_GLES
- if ((GL.glGetProgramBinary) && (GL.glProgramParameteri))
- GL.glProgramParameteri(prg, GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL_TRUE);
-#endif
- GL.glAttachShader(prg, vtx);
- GL.glAttachShader(prg, frg);
-
- GL.glBindAttribLocation(prg, SHAD_VERTEX, "vertex");
- GL.glBindAttribLocation(prg, SHAD_COLOR, "color");
- GL.glBindAttribLocation(prg, SHAD_TEXUV, "tex_coord");
- GL.glBindAttribLocation(prg, SHAD_TEXUV2, "tex_coord2");
- GL.glBindAttribLocation(prg, SHAD_TEXUV3, "tex_coord3");
- GL.glBindAttribLocation(prg, SHAD_TEXA, "tex_coorda");
- GL.glBindAttribLocation(prg, SHAD_TEXSAM, "tex_sample");
- GL.glBindAttribLocation(prg, SHAD_MASK, "mask_coord");
- GL.glBindAttribLocation(prg, SHAD_MASKSAM, "tex_masksample");
-
- GL.glLinkProgram(prg);
- GL.glGetProgramiv(prg, GL_LINK_STATUS, &ok);
- if (!ok)
- {
- gl_compile_link_error(prg, "link fragment and vertex shaders", EINA_FALSE);
- ERR("Abort compile of shader (flags: %16" PRIx64 ")", flags);
- GL.glDeleteProgram(prg);
- prg = 0;
- goto on_error;
- }
-
- on_error:
- if (vtx) GL.glDeleteShader(vtx);
- if (frg) GL.glDeleteShader(frg);
-
- return prg;
-}
-
-GLuint
-ector_gl_shader_compile(uint64_t flags)
-{
- Eina_Strbuf *vertex, *fragment;
- GLuint shd = 0;
-
- vertex = _ector_gl_shader_glsl_get(flags, vertex_glsl);
- fragment = _ector_gl_shader_glsl_get(flags, fragment_glsl);
- if (!vertex || !fragment) goto on_error;
-
- shd = _ector_gl_shader_glsl_link(flags, vertex, fragment);
-
- on_error:
- eina_strbuf_free(vertex);
- eina_strbuf_free(fragment);
-
-#ifdef GL_GLES
- GL.glReleaseShaderCompiler();
-#else
- if (GL.glReleaseShaderCompiler)
- GL.glReleaseShaderCompiler();
-#endif
-
- return shd;
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Eet.h>
-#include <Ector.h>
-
-#include "gl/Ector_GL.h"
-#include "ector_private.h"
-#include "ector_gl_private.h"
-
-typedef struct _Ector_GL_Surface_Data Ector_GL_Surface_Data;
-struct _Ector_GL_Surface_Data
-{
- struct {
- int x, y;
- } reference_point;
-
- Efl_Gfx_Render_Op op;
-};
-
-typedef struct _Ector_Shader Ector_Shader;
-struct _Ector_Shader
-{
- uint64_t flags;
- GLuint prg;
-};
-
-static Eina_Hash *shader_cache = NULL;
-static Eet_File *shader_file = NULL;
-
-static void
-_shader_free(void *s)
-{
- Ector_Shader *shd = s;
-
- GL.glDeleteProgram(shd->prg);
- free(shd);
-}
-
-static Ector_Renderer *
-_ector_gl_surface_ector_surface_renderer_factory_new(Eo *obj,
- Ector_GL_Surface_Data *pd EINA_UNUSED,
- const Efl_Class *type)
-{
- if (type == ECTOR_RENDERER_SHAPE_MIXIN)
- return efl_add_ref(ECTOR_RENDERER_GL_SHAPE_CLASS, NULL, ector_renderer_surface_set(efl_added, obj));
- else if (type == ECTOR_RENDERER_GRADIENT_LINEAR_MIXIN)
- return efl_add_ref(ECTOR_RENDERER_GL_GRADIENT_LINEAR_CLASS, NULL, ector_renderer_surface_set(efl_added, obj));
- else if (type == ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN)
- return efl_add_ref(ECTOR_RENDERER_GL_GRADIENT_RADIAL_CLASS, NULL, ector_renderer_surface_set(efl_added, obj));
-
- ERR("Couldn't find class for type: %s\n", efl_class_name_get(type));
- return NULL;
-}
-
-static void
-_ector_gl_surface_ector_surface_reference_point_set(Eo *obj EINA_UNUSED,
- Ector_GL_Surface_Data *pd,
- int x, int y)
-{
- pd->reference_point.x = x;
- pd->reference_point.y = y;
-}
-
-#define VERTEX_CNT 3
-#define COLOR_CNT 4
-
-static Eina_Bool
-_ector_gl_surface_push(Eo *obj,
- Ector_GL_Surface_Data *pd EINA_UNUSED,
- uint64_t flags, GLshort *vertex, unsigned int vertex_count, unsigned int mul_col)
-{
- unsigned int prog;
-
- prog = ector_gl_surface_shader_get(obj, flags);
-
- // FIXME: Not using map/unmap buffer yet, nor any pipe
- // FIXME: Move some of the state change to start of surface drawing?
- GL.glUseProgram(prog);
- GL.glDisable(GL_TEXTURE_2D);
- GL.glDisable(GL_SCISSOR_TEST);
- GL.glVertexAttribPointer(SHAD_VERTEX, VERTEX_CNT, GL_SHORT, GL_FALSE, 0, vertex);
- GL.glEnableVertexAttribArray(SHAD_COLOR);
- GL.glVertexAttribPointer(SHAD_COLOR, COLOR_CNT, GL_UNSIGNED_BYTE, GL_TRUE, 0, &mul_col);
- GL.glDrawArrays(GL_TRIANGLES, 0, vertex_count);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_gl_surface_state_define(Eo *obj EINA_UNUSED, Ector_GL_Surface_Data *pd, Efl_Gfx_Render_Op op, Eina_Array *clips)
-{
- if (pd->op == op) return EINA_TRUE;
-
- // FIXME: no pipe yet, so we can just change the mode right away
- // Get & apply matrix transformation too
- switch (op)
- {
- case EFL_GFX_RENDER_OP_BLEND: /**< default op: d = d*(1-sa) + s */
- GL.glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
- GL.glEnable(GL_BLEND);
- break;
- case EFL_GFX_RENDER_OP_COPY: /**< d = s */
- // Just disable blend mode. no need to set blend func
- GL.glDisable(GL_BLEND);
- break;
- case EFL_GFX_RENDER_OP_LAST:
- default:
- return EINA_FALSE;
- }
-
- pd->op = op;
-
- // FIXME: we should not ignore clipping, but that can last for later
- (void) clips;
-
- return EINA_TRUE;
-}
-
-static void
-_ector_gl_shader_textures_bind(Ector_Shader *p)
-{
- struct {
- const char *name;
- int enabled;
- } textures[] = {
- { "tex", 0 },
- { "texm", 0 },
- { "texa", 0 },
- { "texu", 0 },
- { "texv", 0 },
- { "texuv", 0 },
- { NULL, 0 }
- };
- Eina_Bool hastex = 0;
- int tex_count = 0;
- GLint loc;
- int i;
-
- if (!p) return;
-
- if ((p->flags & SHADER_FLAG_TEX) != 0)
- {
- textures[0].enabled = 1;
- hastex = 1;
- }
- if ((p->flags & SHADER_FLAG_MASK) != 0)
- {
- textures[1].enabled = 1;
- hastex = 1;
- }
- if ((p->flags & SHADER_FLAG_RGB_A_PAIR) != 0)
- {
- textures[2].enabled = 1;
- hastex = 1;
- }
- if (p->flags & SHADER_FLAG_YUV)
- {
- textures[3].enabled = 1;
- textures[4].enabled = 1;
- hastex = 1;
- }
- else if ((p->flags & SHADER_FLAG_NV12) || (p->flags & SHADER_FLAG_YUY2))
- {
- textures[5].enabled = 1;
- hastex = 1;
- }
-
- if (hastex)
- {
- GL.glUseProgram(p->prg); // FIXME: is this necessary??
- for (i = 0; textures[i].name; i++)
- {
- if (!textures[i].enabled) continue;
- loc = GL.glGetUniformLocation(p->prg, textures[i].name);
- if (loc < 0)
- {
- ERR("Couldn't find uniform '%s' (shader: %16" PRIx64 ")",
- textures[i].name, p->flags);
- }
- GL.glUniform1i(loc, tex_count++);
- }
- }
-}
-
-static Ector_Shader *
-_ector_gl_shader_load(uint64_t flags)
-{
- Eina_Strbuf *buf;
- Ector_Shader *r = NULL;
- void *data;
- int *formats = NULL;
- int length = 0, num = 0;
- GLuint prg;
- GLint ok = 0, vtx = GL_NONE, frg = GL_NONE;
- Eina_Bool direct = 1;
-
- buf = eina_strbuf_new();
- if (!buf) return NULL;
-
- eina_strbuf_append_printf(buf, "ector/shader/%16" PRIx64, flags);
-
- data = (void*) eet_read_direct(shader_file, eina_strbuf_string_get(buf), &length);
- if (!data)
- {
- data = eet_read(shader_file, eina_strbuf_string_get(buf), &length);
- direct = 0;
- }
- if ((!data) || (length <= 0)) goto on_error;
-
- GL.glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &num);
- if (num <= 0) goto on_error;
-
- formats = calloc(num, sizeof(int));
- if (!formats) goto on_error;
-
- GL.glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, formats);
- if (!formats[0]) goto on_error;
-
- prg = GL.glCreateProgram();
- // TODO: invalid rendering error occurs when attempting to use a
- // glProgramBinary. In order to render correctly, we should create a
- // dummy vertex shader.
- vtx = GL.glCreateShader(GL_VERTEX_SHADER);
- GL.glAttachShader(prg, vtx);
- frg = GL.glCreateShader(GL_FRAGMENT_SHADER);
- GL.glAttachShader(prg, frg);
-
- GL.glProgramBinary(prg, formats[0], data, length);
-
- GL.glBindAttribLocation(prg, SHAD_VERTEX, "vertex");
- GL.glBindAttribLocation(prg, SHAD_COLOR, "color");
- GL.glBindAttribLocation(prg, SHAD_TEXUV, "tex_coord");
- GL.glBindAttribLocation(prg, SHAD_TEXUV2, "tex_coord2");
- GL.glBindAttribLocation(prg, SHAD_TEXUV3, "tex_coord3");
- GL.glBindAttribLocation(prg, SHAD_TEXA, "tex_coorda");
- GL.glBindAttribLocation(prg, SHAD_TEXSAM, "tex_sample");
- GL.glBindAttribLocation(prg, SHAD_MASK, "mask_coord");
- GL.glBindAttribLocation(prg, SHAD_MASKSAM, "tex_masksample");
-
- GL.glGetProgramiv(prg, GL_LINK_STATUS, &ok);
- if (!ok)
- {
- gl_compile_link_error(prg, "load a program object", EINA_FALSE);
- ERR("Abort load of program (%s)", eina_strbuf_string_get(buf));
- GL.glDeleteProgram(prg);
- goto on_error;
- }
-
- r = malloc(sizeof (Ector_Shader));
- r->prg = prg;
- r->flags = flags;
-
- _ector_gl_shader_textures_bind(r);
-
- on_error:
- if (vtx) GL.glDeleteShader(vtx);
- if (frg) GL.glDeleteShader(frg);
- free(formats);
-
- if (!direct) free(data);
- eina_strbuf_free(buf);
- return r;
-}
-
-static unsigned int
-_ector_gl_surface_shader_get(Eo *obj EINA_UNUSED, Ector_GL_Surface_Data *pd EINA_UNUSED, uint64_t flags)
-{
- Ector_Shader *shd;
- Eina_Strbuf *buf = NULL;
- void *data = NULL;
- int length = 0, size = 0;
- GLenum format;
- GLuint prg;
-
- shd = eina_hash_find(shader_cache, &flags);
- if (shd) return shd->prg;
-
- shd = _ector_gl_shader_load(flags);
- if (shd)
- {
- eina_hash_direct_add(shader_cache, &shd->flags, shd);
- return shd->prg;
- }
-
- prg = ector_gl_shader_compile(flags);
- if (prg <= 0) return -1;
-
- GL.glGetProgramiv(prg, GL_PROGRAM_BINARY_LENGTH, &length);
- if (length <= 0) return prg;
-
- if (GL.glGetProgramBinary)
- {
- data = malloc(length);
- if (!data) return prg;
-
- GL.glGetProgramBinary(prg, length, &size, &format, data);
- if (length != size) goto on_error;
- }
-
- shd = malloc(sizeof (Ector_Shader));
- if (!shd) goto on_error;
-
- shd->prg = prg;
- shd->flags = flags;
-
- // Save the shader in the cache file
- eina_hash_direct_add(shader_cache, &shd->flags, shd);
-
- // Save binary shader in the cache file
- if (GL.glGetProgramBinary)
- {
- buf = eina_strbuf_new();
- eina_strbuf_append_printf(buf, "ector/shader/%16" PRIx64, flags);
-
- eet_write(shader_file, eina_strbuf_string_get(buf), data, length, 1);
-
- eina_strbuf_free(buf);
- }
-
- on_error:
- free(data);
-
- return prg;
-}
-
-static void
-_ector_gl_surface_efl_object_destructor(Eo *obj, Ector_GL_Surface_Data *pd EINA_UNUSED)
-{
- efl_destructor(efl_super(obj, ECTOR_GL_SURFACE_CLASS));
-
- eina_hash_free(shader_cache);
- shader_cache = NULL;
- eet_close(shader_file);
- shader_file = NULL;
-}
-
-static Efl_Object *
-_ector_gl_surface_efl_object_constructor(Eo *obj, Ector_GL_Surface_Data *pd EINA_UNUSED)
-{
- Eina_Strbuf *file_path = NULL;
-
- obj = efl_constructor(efl_super(obj, ECTOR_GL_SURFACE_CLASS));
- if (!obj) return NULL;
-
- if (shader_cache) return obj;
-
- // Only initialize things once
- shader_cache = eina_hash_int64_new(_shader_free);
-
- /* glsym_glProgramBinary = _ector_gl_symbol_get(obj, "glProgramBinary"); */
- /* glsym_glGetProgramBinary = _ector_gl_symbol_get(obj, "glGetProgramBinary"); */
- /* glsym_glProgramParameteri = _ector_gl_symbol_get(obj, "glProgramParameteri"); */
- /* glsym_glReleaseShaderCompiler = _ector_gl_symbol_get(obj, "glReleaseShaderCompiler"); */
-
- if (GL.glProgramBinary && GL.glGetProgramBinary)
- {
- file_path = eina_strbuf_new();
- if (eina_environment_home_get())
- eina_strbuf_append(file_path, eina_environment_home_get());
- else
- eina_strbuf_append(file_path, eina_environment_tmp_get());
- eina_strbuf_append_printf(file_path, "%c.cache", EINA_PATH_SEP_C);
- // FIXME: test and create path if necessary
- eina_strbuf_append_printf(file_path, "%cector", EINA_PATH_SEP_C);
- eina_strbuf_append_printf(file_path, "%cector-shader-%i.%i.eet",
- EINA_PATH_SEP_C, EFL_VERSION_MAJOR, EFL_VERSION_MINOR);
- shader_file = eet_open(eina_strbuf_string_get(file_path), EET_FILE_MODE_READ_WRITE);
- }
- if (!shader_file)
- {
- ERR("Unable to create '%s' ector binary shader file.", eina_strbuf_string_get(file_path));
- GL.glProgramBinary = NULL;
- }
- eina_strbuf_free(file_path);
-
- return obj;
-}
-
-#include "ector_gl_surface.eo.c"
+++ /dev/null
-import ector_types;
-
-class @beta Ector.GL.Surface extends Ector.GL.Buffer implements Ector.Surface
-{
- [[Ector GL surface class]]
- c_prefix: ector_gl_surface;
- methods {
- shader_get {
- [[Get shader]]
- return: uint; [[Shader count]]
- params {
- @in flags: uint64; [[Flags]]
- }
- }
- push {
- [[Push surface to GPU]]
- return: bool; [[$true on success, $false otherwise]]
- params {
- @in flags: uint64; [[GL flags]]
- @in vertex: ptr(GLshort); [[GL vertex]]
- @in vertex_count: uint; [[GL vertex count]]
- @in mul_col: uint; [[Premultiplied color]]
- }
- }
- state_define {
- [[Define state]]
- return: bool; [[$true on success, $false otherwise]]
- params {
- @in op: Efl.Gfx.Render_Op; [[Render operation]]
- @in clips: array<Eina.Rect>; [[Array of @Eina.Rect clip]]
- }
- }
- }
- implements {
- Ector.Surface.renderer_factory_new;
- Ector.Surface.reference_point { set; }
- Efl.Object.destructor;
- Efl.Object.constructor;
- }
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "gl/Ector_GL.h"
-#include "ector_private.h"
-#include "ector_gl_private.h"
-
-typedef struct _Ector_Renderer_GL_Data Ector_Renderer_GL_Data;
-struct _Ector_Renderer_GL_Data
-{
- Ector_Renderer_Data *base;
-};
-
-static Eina_Bool
-_ector_renderer_gl_ector_renderer_prepare(Eo *obj EINA_UNUSED,
- Ector_Renderer_GL_Data *pd EINA_UNUSED)
-{
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_gl_ector_renderer_draw(Eo *obj EINA_UNUSED,
- Ector_Renderer_GL_Data *pd,
- Efl_Gfx_Render_Op op,
- Eina_Array *clips,
- unsigned int mul_col EINA_UNUSED)
-{
- Eina_Bool r;
-
- r = ector_gl_surface_state_define(pd->base->surface, op, clips);
-
- return r;
-}
-
-static Efl_Object *
-_ector_renderer_gl_efl_object_constructor(Eo *obj, Ector_Renderer_GL_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, ECTOR_RENDERER_GL_CLASS));
- if (!obj) return NULL;
-
- pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
- return obj;
-}
-
-static void
-_ector_renderer_gl_efl_object_destructor(Eo *obj, Ector_Renderer_GL_Data *pd)
-{
- efl_data_xunref(obj, pd->base, obj);
-}
-
-#include "ector_renderer_gl.eo.c"
+++ /dev/null
-import ector_types;
-
-abstract @beta Ector.Renderer.GL extends Ector.Renderer
-{
- [[Ector GL renderer abstract class]]
- methods {
- op_fill @pure_virtual {
- [[Fill operation]]
- return: bool; [[$true on success, $false otherwise]]
- params {
- @in flags: uint64; [[GL flags]]
- @in vertex: ptr(GLshort); [[GL vertex]]
- @in vertex_count: uint; [[GL vertex count]]
- @in mul_col: uint; [[Premultiplied color]]
- }
- }
- }
- implements {
- Ector.Renderer.prepare;
- Ector.Renderer.draw;
- Efl.Object.constructor;
- Efl.Object.destructor;
- }
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "gl/Ector_GL.h"
-#include "ector_private.h"
-#include "ector_gl_private.h"
-
-typedef struct _Ector_Renderer_GL_Gradient_Linear_Data Ector_Renderer_GL_Gradient_Linear_Data;
-struct _Ector_Renderer_GL_Gradient_Linear_Data
-{
- Ector_Renderer_Gradient_Linear_Data *linear;
- Ector_Renderer_Gradient_Data *gradient;
- Ector_Renderer_Data *base;
-};
-
-static Eina_Bool
-_ector_renderer_gl_gradient_linear_ector_renderer_prepare(Eo *obj,
- Ector_Renderer_GL_Gradient_Linear_Data *pd)
-{
- // FIXME: prepare something
- (void) obj;
- (void) pd;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_gl_gradient_linear_ector_renderer_draw(Eo *obj, Ector_Renderer_GL_Gradient_Linear_Data *pd, Efl_Gfx_Render_Op op, Eina_Array *clips, unsigned int mul_col)
-{
- ector_renderer_draw(efl_super(obj, ECTOR_RENDERER_GL_GRADIENT_LINEAR_CLASS), op, clips, mul_col);
-
- // FIXME: draw something !
- (void) pd;
-
- return EINA_TRUE;
-}
-
-static void
-_ector_renderer_gl_gradient_linear_efl_gfx_path_bounds_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_GL_Gradient_Linear_Data *pd,
- Eina_Rect *r)
-{
- EINA_RECTANGLE_SET(r,
- pd->base->origin.x + pd->linear->start.x,
- pd->base->origin.y + pd->linear->start.y,
- pd->linear->end.x - pd->linear->start.x,
- pd->linear->end.y - pd->linear->start.y);
-}
-
-static Eina_Bool
-_ector_renderer_gl_gradient_linear_ector_renderer_gl_op_fill(Eo *obj, Ector_Renderer_GL_Gradient_Linear_Data *pd, uint64_t flags, GLshort *vertex, unsigned int vertex_count, unsigned int mul_col)
-{
- // FIXME: The idea here is to select the right shader and push the needed parameter for it
- // along with the other value
- (void) obj;
- (void) pd;
- (void) flags;
- (void) vertex;
- (void) vertex_count;
- (void) mul_col;
-
- return EINA_TRUE;
-}
-
-static Efl_Object *
-_ector_renderer_gl_gradient_linear_efl_object_constructor(Eo *obj, Ector_Renderer_GL_Gradient_Linear_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, ECTOR_RENDERER_GL_GRADIENT_LINEAR_CLASS));
-
- if (!obj) return NULL;
-
- pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
- pd->linear = efl_data_xref(obj, ECTOR_RENDERER_GRADIENT_LINEAR_MIXIN, obj);
- pd->gradient = efl_data_xref(obj, ECTOR_RENDERER_GRADIENT_MIXIN, obj);
-
- return obj;
-}
-
-static void
-_ector_renderer_gl_gradient_linear_efl_object_destructor(Eo *obj, Ector_Renderer_GL_Gradient_Linear_Data *pd)
-{
- efl_data_xunref(obj, pd->base, obj);
- efl_data_xunref(obj, pd->linear, obj);
- efl_data_xunref(obj, pd->gradient, obj);
-}
-
-static void
-_ector_renderer_gl_gradient_linear_efl_gfx_gradient_stop_set(Eo *obj, Ector_Renderer_GL_Gradient_Linear_Data *pd EINA_UNUSED, const Efl_Gfx_Gradient_Stop *colors, unsigned int length)
-{
- efl_gfx_gradient_stop_set(efl_super(obj, ECTOR_RENDERER_GL_GRADIENT_LINEAR_CLASS), colors, length);
-}
-
-static unsigned int
-_ector_renderer_gl_gradient_linear_ector_renderer_crc_get(const Eo *obj, Ector_Renderer_GL_Gradient_Linear_Data *pd)
-{
- unsigned int crc;
-
- crc = ector_renderer_crc_get(efl_super(obj, ECTOR_RENDERER_GL_GRADIENT_LINEAR_CLASS));
-
- crc = eina_crc((void*) pd->gradient->s, sizeof (Efl_Gfx_Gradient_Spread), crc, EINA_FALSE);
- if (pd->gradient->colors_count)
- crc = eina_crc((void*) pd->gradient->colors, sizeof (Efl_Gfx_Gradient_Stop) * pd->gradient->colors_count, crc, EINA_FALSE);
- crc = eina_crc((void*) pd->linear, sizeof (Ector_Renderer_Gradient_Linear_Data), crc, EINA_FALSE);
-
- return crc;
-}
-
-#include "ector_renderer_gl_gradient_linear.eo.c"
+++ /dev/null
-class @beta Ector.Renderer.GL.Gradient.Linear extends Ector.Renderer.GL implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Linear, Efl.Gfx.Path
-{
- [[Ector GL renderer gradient linear]]
- c_prefix: ector_renderer_gl_gradient_linear;
- implements {
- Ector.Renderer.prepare;
- Ector.Renderer.draw;
- Efl.Gfx.Path.bounds_get;
- Ector.Renderer.crc { get; }
- Ector.Renderer.GL.op_fill;
- Efl.Object.constructor;
- Efl.Object.destructor;
- Efl.Gfx.Gradient.stop { set; }
- }
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "gl/Ector_GL.h"
-#include "ector_private.h"
-#include "ector_gl_private.h"
-
-typedef struct _Ector_Renderer_GL_Gradient_Radial_Data Ector_Renderer_GL_Gradient_Radial_Data;
-struct _Ector_Renderer_GL_Gradient_Radial_Data
-{
- Ector_Renderer_Gradient_Radial_Data *radial;
- Ector_Renderer_Gradient_Data *gradient;
- Ector_Renderer_Data *base;
-};
-
-static Eina_Bool
-_ector_renderer_gl_gradient_radial_ector_renderer_prepare(Eo *obj, Ector_Renderer_GL_Gradient_Radial_Data *pd)
-{
- // FIXME: prepare something
- (void) obj;
- (void) pd;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_gl_gradient_radial_ector_renderer_draw(Eo *obj, Ector_Renderer_GL_Gradient_Radial_Data *pd, Efl_Gfx_Render_Op op, Eina_Array *clips, unsigned int mul_col)
-{
- ector_renderer_draw(efl_super(obj, ECTOR_RENDERER_GL_GRADIENT_RADIAL_CLASS), op, clips, mul_col);
-
- // FIXME: draw something !
- (void) pd;
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_gl_gradient_radial_ector_renderer_gl_op_fill(Eo *obj, Ector_Renderer_GL_Gradient_Radial_Data *pd, uint64_t flags, GLshort *vertex, unsigned int vertex_count, unsigned int mul_col)
-{
- // FIXME: The idea here is to select the right shader and push the needed parameter for it
- // along with the other value
- (void) obj;
- (void) pd;
- (void) flags;
- (void) vertex;
- (void) vertex_count;
- (void) mul_col;
-
- return EINA_TRUE;
-}
-
-static void
-_ector_renderer_gl_gradient_radial_efl_gfx_path_bounds_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_GL_Gradient_Radial_Data *pd,
- Eina_Rect *r)
-{
- EINA_RECTANGLE_SET(r,
- pd->base->origin.x + pd->radial->radial.x - pd->radial->radius,
- pd->base->origin.y + pd->radial->radial.y - pd->radial->radius,
- pd->radial->radius * 2, pd->radial->radius * 2 );
-}
-
-static unsigned int
-_ector_renderer_gl_gradient_radial_ector_renderer_crc_get(const Eo *obj, Ector_Renderer_GL_Gradient_Radial_Data *pd)
-{
- unsigned int crc;
-
- crc = ector_renderer_crc_get(efl_super(obj, ECTOR_RENDERER_GL_GRADIENT_RADIAL_CLASS));
-
- crc = eina_crc((void*) pd->gradient->s, sizeof (Efl_Gfx_Gradient_Spread), crc, EINA_FALSE);
- if (pd->gradient->colors_count)
- crc = eina_crc((void*) pd->gradient->colors, sizeof (Efl_Gfx_Gradient_Stop) * pd->gradient->colors_count, crc, EINA_FALSE);
- crc = eina_crc((void*) pd->radial, sizeof (Ector_Renderer_Gradient_Radial_Data), crc, EINA_FALSE);
-
- return crc;
-}
-
-static Efl_Object *
-_ector_renderer_gl_gradient_radial_efl_object_constructor(Eo *obj, Ector_Renderer_GL_Gradient_Radial_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, ECTOR_RENDERER_GL_GRADIENT_RADIAL_CLASS));
-
- if (!obj) return NULL;
-
- pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
- pd->radial = efl_data_xref(obj, ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN, obj);
- pd->gradient = efl_data_xref(obj, ECTOR_RENDERER_GRADIENT_MIXIN, obj);
-
- return obj;
-}
-
-static void
-_ector_renderer_gl_gradient_radial_efl_object_destructor(Eo *obj, Ector_Renderer_GL_Gradient_Radial_Data *pd)
-{
- efl_data_xunref(obj, pd->base, obj);
- efl_data_xunref(obj, pd->radial, obj);
- efl_data_xunref(obj, pd->gradient, obj);
-}
-
-static void
-_ector_renderer_gl_gradient_radial_efl_gfx_gradient_stop_set(Eo *obj, Ector_Renderer_GL_Gradient_Radial_Data *pd EINA_UNUSED, const Efl_Gfx_Gradient_Stop *colors, unsigned int length)
-{
- efl_gfx_gradient_stop_set(efl_super(obj, ECTOR_RENDERER_GL_GRADIENT_RADIAL_CLASS), colors, length);
-}
-
-#include "ector_renderer_gl_gradient_radial.eo.c"
+++ /dev/null
-class @beta Ector.Renderer.GL.Gradient.Radial extends Ector.Renderer.GL implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Radial, Efl.Gfx.Path
-{
- [[Ector GL renderer gradient radial]]
- c_prefix: ector_renderer_gl_gradient_radial;
- implements {
- Ector.Renderer.prepare;
- Ector.Renderer.draw;
- Efl.Gfx.Path.bounds_get;
- Ector.Renderer.crc { get; }
- Ector.Renderer.GL.op_fill;
- Efl.Object.constructor;
- Efl.Object.destructor;
- Efl.Gfx.Gradient.stop { set; }
- }
-}
+++ /dev/null
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-
-#include "gl/Ector_GL.h"
-#include "ector_private.h"
-#include "ector_gl_private.h"
-
-typedef struct _Ector_Renderer_GL_Shape_Data Ector_Renderer_GL_Shape_Data;
-struct _Ector_Renderer_GL_Shape_Data
-{
- Efl_Gfx_Shape_Public *public_shape;
-
- Ector_Renderer_Shape_Data *shape;
- Ector_Renderer_Data *base;
-
- GLshort *vertex;
-};
-
-EOLIAN static void
-_ector_renderer_gl_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED,
- Ector_Renderer_GL_Shape_Data *pd)
-{
- if (pd->vertex)
- {
- free(pd->vertex);
- pd->vertex = NULL;
- }
-}
-
-static Eina_Bool
-_ector_renderer_gl_shape_ector_renderer_prepare(Eo *obj, Ector_Renderer_GL_Shape_Data *pd)
-{
- Eina_Rect bounding_box;
- Eina_Bool r;
-
- if (pd->vertex) return EINA_TRUE;
-
- r = ector_renderer_prepare(efl_super(obj, ECTOR_RENDERER_GL_SHAPE_CLASS));
-
- efl_gfx_path_bounds_get(obj, &bounding_box);
-
- pd->vertex = malloc(sizeof (GLshort) * 6 * 3);
-
- // Pushing 2 triangles
- pd->vertex[0] = bounding_box.x;
- pd->vertex[1] = bounding_box.y;
- pd->vertex[2] = 0;
- pd->vertex[3] = bounding_box.x + bounding_box.w;
- pd->vertex[4] = bounding_box.y;
- pd->vertex[5] = 0;
- pd->vertex[6] = bounding_box.x;
- pd->vertex[7] = bounding_box.y + bounding_box.h;
- pd->vertex[8] = 0;
-
- pd->vertex[9] = bounding_box.x;
- pd->vertex[10] = bounding_box.y + bounding_box.h;
- pd->vertex[11] = 0;
- pd->vertex[12] = bounding_box.x + bounding_box.w;
- pd->vertex[13] = bounding_box.y + bounding_box.h;
- pd->vertex[14] = 0;
- pd->vertex[15] = bounding_box.x + bounding_box.w;
- pd->vertex[16] = bounding_box.y;
- pd->vertex[17] = 0;
-
- return r;
-}
-
-static Eina_Bool
-_ector_renderer_gl_shape_ector_renderer_draw(Eo *obj, Ector_Renderer_GL_Shape_Data *pd, Efl_Gfx_Render_Op op, Eina_Array *clips, unsigned int mul_col)
-{
- uint64_t flags = 0;
-
- ector_renderer_draw(efl_super(obj, ECTOR_RENDERER_GL_SHAPE_CLASS), op, clips, mul_col);
-
- // FIXME: adjust flags content correctly
- // FIXME: should not ignore clips (idea is that the geometry will be cliped here and the
- // context will just look up clips for match with current pipe to render)...
-
- if (pd->shape->fill)
- {
- ector_renderer_gl_op_fill(pd->shape->fill, flags, pd->vertex, 6, mul_col);
- }
- else
- {
- ector_gl_surface_push(pd->base->surface, flags, pd->vertex, 6, mul_col);
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_gl_shape_ector_renderer_gl_op_fill(Eo *obj EINA_UNUSED,
- Ector_Renderer_GL_Shape_Data *pd EINA_UNUSED,
- uint64_t flags EINA_UNUSED,
- GLshort *vertex EINA_UNUSED,
- unsigned int vertex_count EINA_UNUSED,
- unsigned int mul_col EINA_UNUSED)
-{
- // FIXME: let's find out how to fill a shape with a shape later.
- // I need to read SVG specification and see what to do here.
- ERR("fill with shape not implemented\n");
- return EINA_FALSE;
-}
-
-static void
-_ector_renderer_gl_shape_efl_gfx_path_bounds_get(const Eo *obj, Ector_Renderer_GL_Shape_Data *pd, Eina_Rect *r)
-{
- efl_gfx_path_bounds_get(obj, r);
-
- r->x += pd->base->origin.x;
- r->y += pd->base->origin.y;
-}
-
-static unsigned int
-_ector_renderer_gl_shape_ector_renderer_crc_get(const Eo *obj, Ector_Renderer_GL_Shape_Data *pd)
-{
- unsigned int crc;
-
- crc = ector_renderer_crc_get(efl_super(obj, ECTOR_RENDERER_GL_SHAPE_CLASS));
-
- // This code should be shared with the other implementation
- crc = eina_crc((void*) &pd->shape->stroke.marker, sizeof (pd->shape->stroke.marker), crc, EINA_FALSE);
- crc = eina_crc((void*) &pd->public_shape->stroke.scale, sizeof (pd->public_shape->stroke.scale) * 3, crc, EINA_FALSE); // scale, width, centered
- crc = eina_crc((void*) &pd->public_shape->stroke.color, sizeof (pd->public_shape->stroke.color), crc, EINA_FALSE);
- crc = eina_crc((void*) &pd->public_shape->stroke.cap, sizeof (pd->public_shape->stroke.cap), crc, EINA_FALSE);
- crc = eina_crc((void*) &pd->public_shape->stroke.join, sizeof (pd->public_shape->stroke.join), crc, EINA_FALSE);
-
- if (pd->shape->fill) crc = _renderer_crc_get(pd->shape->fill, crc);
- if (pd->shape->stroke.fill) crc = _renderer_crc_get(pd->shape->stroke.fill, crc);
- if (pd->shape->stroke.marker) crc = _renderer_crc_get(pd->shape->stroke.marker, crc);
- if (pd->public_shape->stroke.dash_length)
- {
- crc = eina_crc((void*) pd->public_shape->stroke.dash, sizeof (Efl_Gfx_Dash) * pd->public_shape->stroke.dash_length, crc, EINA_FALSE);
- }
-
- return crc;
-}
-
-static Efl_Object *
-_ector_renderer_gl_shape_efl_object_constructor(Eo *obj, Ector_Renderer_GL_Shape_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, ECTOR_RENDERER_GL_SHAPE_CLASS));
-
- if (!obj) return NULL;
-
- pd->public_shape = efl_data_xref(obj, EFL_GFX_SHAPE_MIXIN, obj);
- pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj);
- pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
-
- return obj;
-}
-
-static void
-_ector_renderer_gl_shape_efl_object_destructor(Eo *obj, Ector_Renderer_GL_Shape_Data *pd)
-{
- efl_data_xunref(obj, pd->shape, obj);
- efl_data_xunref(obj, pd->base, obj);
- efl_data_xunref(obj, pd->public_shape, obj);
-}
-
-#include "ector_renderer_gl_shape.eo.c"
+++ /dev/null
-class @beta Ector.Renderer.GL.Shape extends Ector.Renderer.GL implements Ector.Renderer.Shape, Efl.Gfx.Path
-{
- [[Ector GL renderer shape class]]
- c_prefix: ector_renderer_gl_shape;
- implements {
- Ector.Renderer.prepare;
- Ector.Renderer.draw;
- Ector.Renderer.crc { get; }
- Ector.Renderer.GL.op_fill;
- Efl.Gfx.Path.bounds_get;
- Efl.Gfx.Path.commit;
- Efl.Object.constructor;
- Efl.Object.destructor;
- }
-}
ector_src += files([
- 'ector_renderer_gl_gradient_linear.c',
- 'ector_renderer_gl_gradient_radial.c',
- 'ector_renderer_gl_shape.c',
- 'ector_renderer_gl.c',
'ector_gl_buffer.c',
- 'ector_gl_surface.c',
'ector_gl_private.h',
- #'shader/ector_gl_shaders.x',
- 'ector_gl_shader.c'
])
pub_eo_files = [
- 'ector_gl_surface.eo',
'ector_gl_buffer.eo',
- 'ector_renderer_gl.eo',
- 'ector_renderer_gl_shape.eo',
- 'ector_renderer_gl_gradient_radial.eo',
- 'ector_renderer_gl_gradient_linear.eo'
]
foreach eo_file : pub_eo_files
+++ /dev/null
-/* DO NOT MODIFY THIS FILE AS IT IS AUTO-GENERATED */
-/* IF IT IS CHANGED PLEASE COMMIT THE CHANGES */
-
-static const char fragment_glsl[] =
- "/* General-purpose fragment shader for all operations in Evas.\n"
- " * This file can either be used directly by evas at runtime to\n"
- " * generate its shaders with the appropriate #defines, or passed\n"
- " * through cpp first (in which case the precision must be manually added).\n"
- " */\n"
- "#ifdef GL_ES\n"
- "# ifdef GL_FRAGMENT_PRECISION_HIGH\n"
- "precision highp float;\n"
- "# else\n"
- "precision mediump float;\n"
- "# endif\n"
- "# ifdef SHD_EXTERNAL\n"
- "extension GL_OES_EGL_image_external : require\n"
- "# define SAMPLER_EXTERNAL_OES samplerExternalOES\n"
- "# endif\n"
- "#else\n"
- "# define SAMPLER_EXTERNAL_OES sampler2D\n"
- "#endif\n"
- "#ifndef SHD_NOMUL\n"
- "varying vec4 col;\n"
- "#endif\n"
- "#ifdef SHD_EXTERNAL\n"
- "uniform SAMPLER_EXTERNAL_OES tex;\n"
- "varying vec2 tex_c;\n"
- "#elif defined(SHD_TEX)\n"
- "uniform sampler2D tex;\n"
- "varying vec2 tex_c;\n"
- "#endif\n"
- "#if defined(SHD_NV12) || defined(SHD_YUY2)\n"
- "uniform sampler2D texuv;\n"
- "varying vec2 tex_c2;\n"
- "#endif\n"
- "#if defined(SHD_YUV)\n"
- "uniform sampler2D texu;\n"
- "uniform sampler2D texv;\n"
- "varying vec2 tex_c2;\n"
- "varying vec2 tex_c3;\n"
- "#endif\n"
- "#ifdef SHD_TEXA\n"
- "uniform sampler2D texa;\n"
- "varying vec2 tex_a;\n"
- "#endif\n"
- "#if defined(SHD_SAM12) || defined(SHD_SAM21) || defined(SHD_SAM22)\n"
- "varying vec4 div_s;\n"
- "# if defined(SHD_SAM12) || defined(SHD_SAM21)\n"
- "varying vec2 tex_s[2];\n"
- "# else\n"
- "varying vec2 tex_s[4];\n"
- "# endif\n"
- "#endif\n"
- "#ifdef SHD_MASK\n"
- "uniform sampler2D texm;\n"
- "varying vec2 tex_m;\n"
- "# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)\n"
- "varying float maskdiv_s;\n"
- "varying vec2 masktex_s[2];\n"
- "# elif defined(SHD_MASKSAM22)\n"
- "varying float maskdiv_s;\n"
- "varying vec2 masktex_s[4];\n"
- "# endif\n"
- "#endif\n"
- "#ifdef SHD_ALPHA\n"
- "# define SWZ aaaa\n"
- "#else\n"
- "# ifndef SHD_BGRA\n"
- "# if defined(SHD_IMG) && defined(BIGENDIAN)\n"
- "# define SWZ gbar\n"
- "# else\n"
- "# define SWZ bgra\n"
- "#endif\n"
- "# else\n"
- "# if defined(SHD_IMG) && defined(BIGENDIAN)\n"
- "# define SWZ grab\n"
- "# else\n"
- "# define SWZ rgba\n"
- "# endif\n"
- "# endif\n"
- "#endif\n"
- "void main()\n"
- "{\n"
- " vec4 c;\n"
- "#if defined(SHD_YUV) || defined(SHD_NV12) || defined(SHD_YUY2)\n"
- " float r, g, b, y, u, v, vmu;\n"
- "# if defined(SHD_YUV)\n"
- " y = texture2D(tex, tex_c).r;\n"
- " u = texture2D(texu, tex_c2).r;\n"
- " v = texture2D(texv, tex_c3).r;\n"
- "# elif defined(SHD_NV12) || defined(SHD_YUY2)\n"
- " y = texture2D(tex, tex_c).g;\n"
- " u = texture2D(texuv, tex_c2).g;\n"
- " v = texture2D(texuv, tex_c2).a;\n"
- "# endif\n"
- "// center u and v around 0 for uv and y (with 128/255 for u + v, 16/255 for y)\n"
- " u = u - 0.5;\n"
- " v = v - 0.5;\n"
- "# if defined (SHD_YUV_709)\n"
- "// 709 yuv colorspace for hd content\n"
- " y = (y - 0.062) * 1.164;\n"
- " vmu = (v * 0.534) + (u * 0.213);\n"
- " v = v * 1.793;\n"
- " u = u * 2.115;\n"
- "# else\n"
- "// 601 colorspace constants (older yuv content)\n"
- " y = (y - 0.062) * 1.164;\n"
- " vmu = (v * 0.813) + (u * 0.391);\n"
- " v = v * 1.596;\n"
- " u = u * 2.018;\n"
- "# endif\n"
- "// common yuv\n"
- " r = y + v;\n"
- " g = y - vmu;\n"
- " b = y + u;\n"
- " c = vec4(r, g, b, 1.0);\n"
- "#elif defined(SHD_SAM12) || defined(SHD_SAM21)\n"
- " vec4 col00 = texture2D(tex, tex_c + tex_s[0]).SWZ;\n"
- " vec4 col01 = texture2D(tex, tex_c + tex_s[1]).SWZ;\n"
- " c = (col00 + col01) / div_s;\n"
- "#elif defined(SHD_SAM22)\n"
- " vec4 col00 = texture2D(tex, tex_c + tex_s[0]).SWZ;\n"
- " vec4 col01 = texture2D(tex, tex_c + tex_s[1]).SWZ;\n"
- " vec4 col10 = texture2D(tex, tex_c + tex_s[2]).SWZ;\n"
- " vec4 col11 = texture2D(tex, tex_c + tex_s[3]).SWZ;\n"
- " c = (col00 + col01 + col10 + col11) / div_s;\n"
- "#elif defined(SHD_TEX) || defined(SHD_EXTERNAL)\n"
- " c = texture2D(tex, tex_c).SWZ;\n"
- "#else\n"
- " c = vec4(1, 1, 1, 1);\n"
- "#endif\n"
- "#ifdef SHD_MASK\n"
- " float ma;\n"
- "# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)\n"
- " float ma00 = texture2D(texm, tex_m + masktex_s[0]).a;\n"
- " float ma01 = texture2D(texm, tex_m + masktex_s[1]).a;\n"
- " ma = (ma00 + ma01) / maskdiv_s;\n"
- "# elif defined(SHD_MASKSAM22)\n"
- " float ma00 = texture2D(texm, tex_m + masktex_s[0]).a;\n"
- " float ma01 = texture2D(texm, tex_m + masktex_s[1]).a;\n"
- " float ma10 = texture2D(texm, tex_m + masktex_s[2]).a;\n"
- " float ma11 = texture2D(texm, tex_m + masktex_s[3]).a;\n"
- " ma = (ma00 + ma01 + ma10 + ma11) / maskdiv_s;\n"
- "# else\n"
- " ma = texture2D(texm, tex_m).a;\n"
- "# endif\n"
- "#endif\n"
- " gl_FragColor =\n"
- " c\n"
- "#ifndef SHD_NOMUL\n"
- " * col\n"
- "#endif\n"
- "#ifdef SHD_MASK\n"
- " * ma\n"
- "#endif\n"
- "#ifdef SHD_TEXA\n"
- " * texture2D(texa, tex_a).r\n"
- "#endif\n"
- " ;\n"
- "#ifdef SHD_AFILL\n"
- " gl_FragColor.a = 1.0;\n"
- "#endif\n"
- "}\n";
-
-static const char vertex_glsl[] =
- "/* General-purpose vertex shader for all operations in Evas.\n"
- " * This file can either be used directly by evas at runtime to\n"
- " * generate its shaders with the appropriate #defines, or passed\n"
- " * through cpp first (in which case the precision must be manually added).\n"
- " */\n"
- "#ifdef GL_ES\n"
- "precision highp float;\n"
- "#endif\n"
- "attribute vec4 vertex;\n"
- "uniform mat4 mvp;\n"
- "/* All except nomul */\n"
- "#ifndef SHD_NOMUL\n"
- "attribute vec4 color;\n"
- "varying vec4 col;\n"
- "#endif\n"
- "/* All images & fonts */\n"
- "#if defined(SHD_TEX) || defined(SHD_EXTERNAL)\n"
- "attribute vec2 tex_coord;\n"
- "varying vec2 tex_c;\n"
- "#endif\n"
- "/* NV12, YUY2 */\n"
- "#if defined(SHD_NV12) || defined(SHD_YUY2) || defined(SHD_YUV)\n"
- "attribute vec2 tex_coord2;\n"
- "varying vec2 tex_c2;\n"
- "#endif\n"
- "/* YUV */\n"
- "#ifdef SHD_YUV\n"
- "attribute vec2 tex_coord3;\n"
- "varying vec2 tex_c3;\n"
- "#endif\n"
- "/* RGB+A */\n"
- "#ifdef SHD_TEXA\n"
- "attribute vec2 tex_coorda;\n"
- "varying vec2 tex_a;\n"
- "#endif\n"
- "/* Sampling */\n"
- "#if defined(SHD_SAM12) || defined(SHD_SAM21) || defined(SHD_SAM22)\n"
- "attribute vec2 tex_sample;\n"
- "varying vec4 div_s;\n"
- "# if defined(SHD_SAM12) || defined(SHD_SAM21)\n"
- "varying vec2 tex_s[2];\n"
- "# else\n"
- "varying vec2 tex_s[4];\n"
- "# endif\n"
- "#endif\n"
- "/* Masking */\n"
- "#ifdef SHD_MASK\n"
- "attribute vec4 mask_coord;\n"
- "varying vec2 tex_m;\n"
- "# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)\n"
- "attribute vec2 tex_masksample;\n"
- "varying float maskdiv_s;\n"
- "varying vec2 masktex_s[2];\n"
- "# elif defined(SHD_MASKSAM22)\n"
- "attribute vec2 tex_masksample;\n"
- "varying float maskdiv_s;\n"
- "varying vec2 masktex_s[4];\n"
- "# endif\n"
- "#endif\n"
- "void main()\n"
- "{\n"
- " gl_Position = mvp * vertex;\n"
- "#ifndef SHD_NOMUL\n"
- " col = color;\n"
- "#endif\n"
- "#if defined(SHD_TEX) || defined(SHD_EXTERNAL)\n"
- " tex_c = tex_coord;\n"
- "#endif\n"
- "#ifdef SHD_NV12\n"
- " tex_c2 = tex_coord2 * 0.5;\n"
- "#endif\n"
- "#ifdef SHD_YUY2\n"
- " tex_c2 = vec2(tex_coord2.x * 0.5, tex_coord2.y);\n"
- "#endif\n"
- "#ifdef SHD_YUV\n"
- " tex_c2 = tex_coord2;\n"
- " tex_c3 = tex_coord3;\n"
- "#endif\n"
- "#ifdef SHD_TEXA\n"
- " tex_a = tex_coorda;\n"
- "#endif\n"
- "#if defined(SHD_SAM12)\n"
- " tex_s[0] = vec2(0, -tex_sample.y);\n"
- " tex_s[1] = vec2(0, tex_sample.y);\n"
- " div_s = vec4(2, 2, 2, 2);\n"
- "#elif defined(SHD_SAM21)\n"
- " tex_s[0] = vec2(-tex_sample.x, 0);\n"
- " tex_s[1] = vec2( tex_sample.x, 0);\n"
- " div_s = vec4(2, 2, 2, 2);\n"
- "#elif defined(SHD_SAM22)\n"
- " tex_s[0] = vec2(-tex_sample.x, -tex_sample.y);\n"
- " tex_s[1] = vec2( tex_sample.x, -tex_sample.y);\n"
- " tex_s[2] = vec2( tex_sample.x, tex_sample.y);\n"
- " tex_s[3] = vec2(-tex_sample.x, tex_sample.y);\n"
- " div_s = vec4(4, 4, 4, 4);\n"
- "#endif\n"
- "#if defined(SHD_MASKSAM12)\n"
- " masktex_s[0] = vec2(0, -tex_masksample.y);\n"
- " masktex_s[1] = vec2(0, tex_masksample.y);\n"
- " maskdiv_s = 2.0;\n"
- "#elif defined(SHD_MASKSAM21)\n"
- " masktex_s[0] = vec2(-tex_masksample.x, 0);\n"
- " masktex_s[1] = vec2( tex_masksample.x, 0);\n"
- " maskdiv_s = 2.0;\n"
- "#elif defined(SHD_MASKSAM22)\n"
- " masktex_s[0] = vec2(-tex_masksample.x, -tex_masksample.y);\n"
- " masktex_s[1] = vec2( tex_masksample.x, -tex_masksample.y);\n"
- " masktex_s[2] = vec2( tex_masksample.x, tex_masksample.y);\n"
- " masktex_s[3] = vec2(-tex_masksample.x, tex_masksample.y);\n"
- " maskdiv_s = 4.0;\n"
- "#endif\n"
- "#ifdef SHD_MASK\n"
- " // mask_coord.w contains the Y-invert flag\n"
- " // position on screen in [0..1] range of current pixel\n"
- " vec4 mask_Position = mvp * vertex * vec4(0.5, sign(mask_coord.w) * 0.5, 0.5, 0.5) + vec4(0.5, 0.5, 0, 0);\n"
- " tex_m = mask_Position.xy * abs(mask_coord.zw) + mask_coord.xy;\n"
- "#endif\n"
- "}\n";
-
+++ /dev/null
-/* General-purpose fragment shader for all operations in Evas.
- * This file can either be used directly by evas at runtime to
- * generate its shaders with the appropriate #defines, or passed
- * through cpp first (in which case the precision must be manually added).
- */
-
-FRAGMENT_SHADER
-
-#ifndef SHD_NOMUL
-varying vec4 col;
-#endif
-
-#ifdef SHD_EXTERNAL
-uniform SAMPLER_EXTERNAL_OES tex;
-varying vec2 tex_c;
-#elif defined(SHD_TEX)
-uniform sampler2D tex;
-varying vec2 tex_c;
-#endif
-
-#if defined(SHD_NV12) || defined(SHD_YUY2)
-uniform sampler2D texuv;
-varying vec2 tex_c2;
-#endif
-
-#if defined(SHD_YUV)
-uniform sampler2D texu;
-uniform sampler2D texv;
-varying vec2 tex_c2;
-varying vec2 tex_c3;
-#endif
-
-#ifdef SHD_TEXA
-uniform sampler2D texa;
-varying vec2 tex_a;
-#endif
-
-#if defined(SHD_SAM12) || defined(SHD_SAM21) || defined(SHD_SAM22)
-varying vec4 div_s;
-# if defined(SHD_SAM12) || defined(SHD_SAM21)
-varying vec2 tex_s[2];
-# else
-varying vec2 tex_s[4];
-# endif
-#endif
-
-#ifdef SHD_MASK
-uniform sampler2D texm;
-varying vec2 tex_m;
-# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)
-varying float maskdiv_s;
-varying vec2 masktex_s[2];
-# elif defined(SHD_MASKSAM22)
-varying float maskdiv_s;
-varying vec2 masktex_s[4];
-# endif
-#endif
-
-#ifdef SHD_ALPHA
-# define SWZ aaaa
-#else
-# ifndef SHD_BGRA
-# if defined(SHD_IMG) && defined(BIGENDIAN)
-# define SWZ gbar
-# else
-# define SWZ bgra
-#endif
-# else
-# if defined(SHD_IMG) && defined(BIGENDIAN)
-# define SWZ grab
-# else
-# define SWZ rgba
-# endif
-# endif
-#endif
-
-void main()
-{
- vec4 c;
-
-#if defined(SHD_YUV) || defined(SHD_NV12) || defined(SHD_YUY2)
- float r, g, b, y, u, v, vmu;
-# if defined(SHD_YUV)
- y = texture2D(tex, tex_c).r;
- u = texture2D(texu, tex_c2).r;
- v = texture2D(texv, tex_c3).r;
-# elif defined(SHD_NV12) || defined(SHD_YUY2)
- y = texture2D(tex, tex_c).g;
- u = texture2D(texuv, tex_c2).g;
- v = texture2D(texuv, tex_c2).a;
-# endif
-// center u and v around 0 for uv and y (with 128/255 for u + v, 16/255 for y)
- u = u - 0.5;
- v = v - 0.5;
-
-# if defined (SHD_YUV_709)
-// 709 yuv colorspace for hd content
- y = (y - 0.062) * 1.164;
- vmu = (v * 0.534) + (u * 0.213);
- v = v * 1.793;
- u = u * 2.115;
-# else
-// 601 colorspace constants (older yuv content)
- y = (y - 0.062) * 1.164;
- vmu = (v * 0.813) + (u * 0.391);
- v = v * 1.596;
- u = u * 2.018;
-# endif
-// common yuv
- r = y + v;
- g = y - vmu;
- b = y + u;
- c = vec4(r, g, b, 1.0);
-
-#elif defined(SHD_SAM12) || defined(SHD_SAM21)
- vec4 col00 = texture2D(tex, tex_c + tex_s[0]).SWZ;
- vec4 col01 = texture2D(tex, tex_c + tex_s[1]).SWZ;
- c = (col00 + col01) / div_s;
-
-#elif defined(SHD_SAM22)
- vec4 col00 = texture2D(tex, tex_c + tex_s[0]).SWZ;
- vec4 col01 = texture2D(tex, tex_c + tex_s[1]).SWZ;
- vec4 col10 = texture2D(tex, tex_c + tex_s[2]).SWZ;
- vec4 col11 = texture2D(tex, tex_c + tex_s[3]).SWZ;
- c = (col00 + col01 + col10 + col11) / div_s;
-
-#elif defined(SHD_TEX) || defined(SHD_EXTERNAL)
- c = texture2D(tex, tex_c).SWZ;
-
-#else
- c = vec4(1, 1, 1, 1);
-#endif
-
-#ifdef SHD_MASK
- float ma;
-# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)
- float ma00 = texture2D(texm, tex_m + masktex_s[0]).a;
- float ma01 = texture2D(texm, tex_m + masktex_s[1]).a;
- ma = (ma00 + ma01) / maskdiv_s;
-# elif defined(SHD_MASKSAM22)
- float ma00 = texture2D(texm, tex_m + masktex_s[0]).a;
- float ma01 = texture2D(texm, tex_m + masktex_s[1]).a;
- float ma10 = texture2D(texm, tex_m + masktex_s[2]).a;
- float ma11 = texture2D(texm, tex_m + masktex_s[3]).a;
- ma = (ma00 + ma01 + ma10 + ma11) / maskdiv_s;
-# else
- ma = texture2D(texm, tex_m).a;
-# endif
-#endif
-
- gl_FragColor =
- c
-#ifndef SHD_NOMUL
- * col
-#endif
-#ifdef SHD_MASK
- * ma
-#endif
-#ifdef SHD_TEXA
- * texture2D(texa, tex_a).r
-#endif
- ;
-
-#ifdef SHD_AFILL
- gl_FragColor.a = 1.0;
-#endif
-}
-
+++ /dev/null
-#!/bin/sh
-
-# This script will generate a C file containing all the shaders used by Evas
-
-DIR=`dirname $0`
-
-OUTPUT="$DIR/ector_gl_shaders.x"
-
-# Skip generation if there is no diff (or no git)
-if ! git rev-parse 2>> /dev/null >> /dev/null ; then exit 0 ; fi
-if git diff --quiet --exit-code -- "$DIR"
-then
- for f in gen_shaders.sh fragment.glsl vertex.glsl include.glsl; do
- if [ "$DIR/$f" -nt "$OUTPUT" ]; then
- touch "$OUTPUT"
- break
- fi
- done
- exit 0
-fi
-
-# Write header
-rm -f "$OUTPUT.tmp"
-cat <<EOF >> $OUTPUT.tmp
-/* DO NOT MODIFY THIS FILE AS IT IS AUTO-GENERATED */
-/* IF IT IS CHANGED PLEASE COMMIT THE CHANGES */
-
-EOF
-
-for SHD in fragment vertex ; do
- m4 "$DIR/include.glsl" "$DIR/$SHD.glsl" > "$SHD.tmp"
-
- OIFS="$IFS"
- IFS=$'\n'
- echo -n "static const char ${SHD}_glsl[] =" >> "$OUTPUT.tmp"
- for LINE in `cat "$SHD.tmp"` ; do
- printf "\n \"$LINE\\\n\"" >> "$OUTPUT.tmp"
- done
- printf ";\n\n" >> "$OUTPUT.tmp"
- IFS="$OIFS"
-
- rm "$SHD.tmp"
-done
-
-if ! cmp "$OUTPUT" "$OUTPUT.tmp" >/dev/null 2>/dev/null; then
- echo "$OUTPUT updated, please 'git commit' it."
- rm -f "$OUTPUT"
- mv "$OUTPUT.tmp" "$OUTPUT"
-else
- rm -f "$OUTPUT.tmp"
-fi
-
+++ /dev/null
-define(`FRAGMENT_SHADER',`
-#ifdef GL_ES
-# ifdef GL_FRAGMENT_PRECISION_HIGH
-precision highp float;
-# else
-precision mediump float;
-# endif
-# ifdef SHD_EXTERNAL
-extension GL_OES_EGL_image_external : require
-# define SAMPLER_EXTERNAL_OES samplerExternalOES
-# endif
-#else
-# define SAMPLER_EXTERNAL_OES sampler2D
-#endif
-')
-
-define(`VERTEX_SHADER',`
-#ifdef GL_ES
-precision highp float;
-#endif
-')
-
+++ /dev/null
-/* General-purpose vertex shader for all operations in Evas.
- * This file can either be used directly by evas at runtime to
- * generate its shaders with the appropriate #defines, or passed
- * through cpp first (in which case the precision must be manually added).
- */
-
-VERTEX_SHADER
-
-attribute vec4 vertex;
-uniform mat4 mvp;
-
-/* All except nomul */
-#ifndef SHD_NOMUL
-attribute vec4 color;
-varying vec4 col;
-#endif
-
-/* All images & fonts */
-#if defined(SHD_TEX) || defined(SHD_EXTERNAL)
-attribute vec2 tex_coord;
-varying vec2 tex_c;
-#endif
-
-/* NV12, YUY2 */
-#if defined(SHD_NV12) || defined(SHD_YUY2) || defined(SHD_YUV)
-attribute vec2 tex_coord2;
-varying vec2 tex_c2;
-#endif
-
-/* YUV */
-#ifdef SHD_YUV
-attribute vec2 tex_coord3;
-varying vec2 tex_c3;
-#endif
-
-/* RGB+A */
-#ifdef SHD_TEXA
-attribute vec2 tex_coorda;
-varying vec2 tex_a;
-#endif
-
-/* Sampling */
-#if defined(SHD_SAM12) || defined(SHD_SAM21) || defined(SHD_SAM22)
-attribute vec2 tex_sample;
-varying vec4 div_s;
-# if defined(SHD_SAM12) || defined(SHD_SAM21)
-varying vec2 tex_s[2];
-# else
-varying vec2 tex_s[4];
-# endif
-#endif
-
-/* Masking */
-#ifdef SHD_MASK
-attribute vec4 mask_coord;
-varying vec2 tex_m;
-# if defined(SHD_MASKSAM12) || defined(SHD_MASKSAM21)
-attribute vec2 tex_masksample;
-varying float maskdiv_s;
-varying vec2 masktex_s[2];
-# elif defined(SHD_MASKSAM22)
-attribute vec2 tex_masksample;
-varying float maskdiv_s;
-varying vec2 masktex_s[4];
-# endif
-#endif
-
-
-void main()
-{
- gl_Position = mvp * vertex;
-
-#ifndef SHD_NOMUL
- col = color;
-#endif
-
-#if defined(SHD_TEX) || defined(SHD_EXTERNAL)
- tex_c = tex_coord;
-#endif
-
-#ifdef SHD_NV12
- tex_c2 = tex_coord2 * 0.5;
-#endif
-
-#ifdef SHD_YUY2
- tex_c2 = vec2(tex_coord2.x * 0.5, tex_coord2.y);
-#endif
-
-#ifdef SHD_YUV
- tex_c2 = tex_coord2;
- tex_c3 = tex_coord3;
-#endif
-
-#ifdef SHD_TEXA
- tex_a = tex_coorda;
-#endif
-
-#if defined(SHD_SAM12)
- tex_s[0] = vec2(0, -tex_sample.y);
- tex_s[1] = vec2(0, tex_sample.y);
- div_s = vec4(2, 2, 2, 2);
-#elif defined(SHD_SAM21)
- tex_s[0] = vec2(-tex_sample.x, 0);
- tex_s[1] = vec2( tex_sample.x, 0);
- div_s = vec4(2, 2, 2, 2);
-#elif defined(SHD_SAM22)
- tex_s[0] = vec2(-tex_sample.x, -tex_sample.y);
- tex_s[1] = vec2( tex_sample.x, -tex_sample.y);
- tex_s[2] = vec2( tex_sample.x, tex_sample.y);
- tex_s[3] = vec2(-tex_sample.x, tex_sample.y);
- div_s = vec4(4, 4, 4, 4);
-#endif
-
-#if defined(SHD_MASKSAM12)
- masktex_s[0] = vec2(0, -tex_masksample.y);
- masktex_s[1] = vec2(0, tex_masksample.y);
- maskdiv_s = 2.0;
-#elif defined(SHD_MASKSAM21)
- masktex_s[0] = vec2(-tex_masksample.x, 0);
- masktex_s[1] = vec2( tex_masksample.x, 0);
- maskdiv_s = 2.0;
-#elif defined(SHD_MASKSAM22)
- masktex_s[0] = vec2(-tex_masksample.x, -tex_masksample.y);
- masktex_s[1] = vec2( tex_masksample.x, -tex_masksample.y);
- masktex_s[2] = vec2( tex_masksample.x, tex_masksample.y);
- masktex_s[3] = vec2(-tex_masksample.x, tex_masksample.y);
- maskdiv_s = 4.0;
-#endif
-
-#ifdef SHD_MASK
- // mask_coord.w contains the Y-invert flag
- // position on screen in [0..1] range of current pixel
- vec4 mask_Position = mvp * vertex * vec4(0.5, sign(mask_coord.w) * 0.5, 0.5, 0.5) + vec4(0.5, 0.5, 0, 0);
- tex_m = mask_Position.xy * abs(mask_coord.zw) + mask_coord.xy;
-#endif
-}
-
ector_src = files([
'ector_main.c',
- 'ector_gl_internal.h',
'ector_buffer.c',
- 'ector_renderer_shape.c',
- 'ector_renderer_image.c',
- 'ector_renderer.c',
- 'ector_renderer_gradient.c',
- 'ector_renderer_gradient_radial.c',
- 'ector_renderer_gradient_linear.c'
])
pub_eo_files = [
- 'ector_surface.eo',
'ector_buffer.eo',
- 'ector_renderer.eo',
- 'ector_renderer_shape.eo',
- 'ector_renderer_image.eo',
- 'ector_renderer_gradient.eo',
- 'ector_renderer_gradient_radial.eo',
- 'ector_renderer_gradient_linear.eo'
]
ector_pub_eo_files = pub_eo_files
# define ECTOR_SOFTWARE_PRIVATE_H_
#include "Ector_Software.h"
-#include "sw_ft_raster.h"
-#include "sw_ft_stroker.h"
#include "../ector_private.h"
-#include "draw.h"
-
-typedef struct _Ector_Software_Surface_Data Ector_Software_Surface_Data;
-typedef struct _Ector_Software_Thread Ector_Software_Thread;
-
-struct _Ector_Software_Thread
-{
- Eina_Thread_Queue *queue;
- Eina_Thread thread;
-
- SW_FT_Raster raster;
- SW_FT_Stroker stroker;
-};
-
-// Gradient related structure
-typedef struct _Software_Gradient_Linear_Data
-{
- float x1, y1, x2, y2;
- float dx, dy, l, off;
-} Software_Gradient_Linear_Data;
-
-typedef struct _Software_Gradient_Radial_Data
-{
- float cx, cy, fx, fy, cradius, fradius;
- float dx, dy, dr, sqrfr, a, inv2a;
- Eina_Bool extended;
-} Software_Gradient_Radial_Data;
-
-typedef struct _Ector_Renderer_Software_Gradient_Data
-{
- Ector_Software_Surface_Data *surface;
- Ector_Renderer_Gradient_Data *gd;
- union {
- Ector_Renderer_Gradient_Linear_Data *gld;
- Ector_Renderer_Gradient_Radial_Data *grd;
- };
- union {
- Software_Gradient_Linear_Data linear;
- Software_Gradient_Radial_Data radial;
- };
- uint32_t* color_table;
-
- Eina_Bool alpha;
- int ctable_status; //Ready for color table?
-} Ector_Renderer_Software_Gradient_Data;
-
-typedef struct _Shape_Rle_Data
-{
- Eina_Rectangle bbox;
- //ALLOC == SIZE?
- unsigned short alloc;
- unsigned short size;
- SW_FT_Span *spans;// array of Scanlines.
-} Shape_Rle_Data;
-
-typedef struct _Clip_Data
-{
- Eina_Array *clips; //Eina_Rectangle
- Shape_Rle_Data *path;
- unsigned int enabled : 1;
- unsigned int type : 1; //0: rect, 1: path
-} Clip_Data;
-
-typedef enum _Span_Data_Type {
- None,
- Solid,
- LinearGradient,
- RadialGradient,
-} Span_Data_Type;
-
-typedef struct _Span_Data
-{
- Ector_Software_Buffer_Base_Data *raster_buffer;
- SW_FT_SpanFunc blend;
- SW_FT_SpanFunc unclipped_blend;
-
- int offx, offy;
- Clip_Data clip;
- Ector_Software_Buffer_Base_Data *comp;
- Efl_Gfx_Vg_Composite_Method comp_method;
- Eina_Matrix3 inv;
- Span_Data_Type type;
- Eina_Bool fast_matrix;
- uint32_t mul_col;
- Efl_Gfx_Render_Op op;
- union {
- uint32_t color;
- Ector_Renderer_Software_Gradient_Data *gradient;
- Ector_Software_Buffer_Base_Data *buffer;
- };
-} Span_Data;
-
-typedef struct _Software_Rasterizer
-{
- Span_Data fill_data;
- //Necessary?:
- Eina_Matrix3 *transform;
- Eina_Rectangle system_clip;
-} Software_Rasterizer;
-
-struct _Ector_Software_Surface_Data
-{
- Software_Rasterizer *rasterizer;
- int x;
- int y;
-};
-
-
-int ector_software_gradient_init(void);
-void ector_software_rasterizer_init(Software_Rasterizer *rasterizer);
-
-void ector_software_rasterizer_stroke_set(Ector_Software_Thread *thread, Software_Rasterizer *rasterizer,
- double width,
- Efl_Gfx_Cap cap_style, Efl_Gfx_Join join_style, Eina_Matrix3 *m, double miterlimit);
-
-void ector_software_rasterizer_transform_set(Software_Rasterizer *rasterizer, Eina_Matrix3 *t);
-void ector_software_rasterizer_color_set(Software_Rasterizer *rasterizer, int r, int g, int b, int a);
-void ector_software_rasterizer_linear_gradient_set(Software_Rasterizer *rasterizer, Ector_Renderer_Software_Gradient_Data *linear);
-void ector_software_rasterizer_radial_gradient_set(Software_Rasterizer *rasterizer, Ector_Renderer_Software_Gradient_Data *radial);
-void ector_software_rasterizer_clip_rect_set(Software_Rasterizer *rasterizer, Eina_Array *clips);
-void ector_software_rasterizer_clip_shape_set(Software_Rasterizer *rasterizer, Shape_Rle_Data *clip);
-
-
-
-Shape_Rle_Data * ector_software_rasterizer_generate_rle_data(Ector_Software_Thread *thread, Software_Rasterizer *rasterizer, SW_FT_Outline *outline);
-Shape_Rle_Data * ector_software_rasterizer_generate_stroke_rle_data(Ector_Software_Thread *thread, Software_Rasterizer *rasterizer, SW_FT_Outline *outline, Eina_Bool closePath);
-
-void ector_software_rasterizer_draw_rle_data(Software_Rasterizer *rasterizer,
- int x, int y, uint32_t mul_col,
- Efl_Gfx_Render_Op op,
- Shape_Rle_Data* rle,
- Ector_Buffer *comp,
- Efl_Gfx_Vg_Composite_Method comp_method);
-
-void ector_software_rasterizer_destroy_rle_data(Shape_Rle_Data *rle);
-
-
-// Gradient Api
-void destroy_color_table(Ector_Renderer_Software_Gradient_Data *gdata);
-void fetch_linear_gradient(uint32_t *buffer, Span_Data *data, int y, int x, int length);
-void fetch_radial_gradient(uint32_t *buffer, Span_Data *data, int y, int x, int length);
-
-void ector_software_thread_init(Ector_Software_Thread *thread);
-void ector_software_thread_shutdown(Ector_Software_Thread *thread);
-
-typedef void (*Ector_Thread_Worker_Cb)(void *data, Ector_Software_Thread *thread);
-
-void ector_software_wait(Ector_Thread_Worker_Cb cb, Eina_Free_Cb done, void *data);
-void ector_software_schedule(Ector_Thread_Worker_Cb cb, Eina_Free_Cb done, void *data);
-
-void ector_software_gradient_color_update(Ector_Renderer_Software_Gradient_Data *gdata);
#endif
}
static void
-_efl_canvas_vg_container_render_pre_tvg(Evas_Object_Protected_Data *obj,
+_efl_canvas_vg_container_render_pre(Evas_Object_Protected_Data *obj,
EINA_UNUSED Efl_VG *node,
Efl_Canvas_Vg_Node_Data *nd,
Eina_Matrix3 *pTransform,
EINA_LIST_FOREACH(cd->children, l, child)
{
Efl_Canvas_Vg_Node_Data *cnd = efl_data_scope_get(child, EFL_CANVAS_VG_NODE_CLASS);
- if (cnd && cnd->render_pre_tvg)
- cnd->render_pre_tvg(obj, child, cnd, cTransform, canvas, cd->scene);
+ if (cnd && cnd->render_pre)
+ cnd->render_pre(obj, child, cnd, cTransform, canvas, cd->scene);
}
//We don't want to push composition sources
else if (canvas) tvg_canvas_push(canvas, cd->scene);
}
-static void
-_efl_canvas_vg_container_render_pre(Evas_Object_Protected_Data *vg_pd,
- Efl_VG *obj EINA_UNUSED,
- Efl_Canvas_Vg_Node_Data *nd,
- void *engine, void *output, void *context,
- Ector_Surface *surface,
- Eina_Matrix3 *ptransform,
- int p_opacity,
- Ector_Buffer *comp,
- Efl_Gfx_Vg_Composite_Method comp_method,
- void *data)
-{
- Efl_Canvas_Vg_Container_Data *pd = data;
- Eina_List *l;
- Efl_VG *child;
- Efl_Gfx_Change_Flag flag;
-
- if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return;
-
- flag = nd->flags;
- nd->flags = EFL_GFX_CHANGE_FLAG_NONE;
-
- EFL_CANVAS_VG_COMPUTE_MATRIX(ctransform, ptransform, nd);
- EFL_CANVAS_VG_COMPUTE_ALPHA(c_r, c_g, c_b, c_a, p_opacity, nd);
-
- //If the container has transparency, it internally alpha blends with ector buffer.
- //So ector buffer must be created synchronously.
- if (c_a < 255 && vg_pd && vg_pd->object)
- {
- Efl_Canvas_Vg_Object_Data *od = efl_data_scope_get(vg_pd->object, EFL_CANVAS_VG_OBJECT_CLASS);
- od->sync_render = EINA_TRUE;
- }
-
- EINA_LIST_FOREACH(pd->children, l, child)
- {
- //Don't need to update composite nodes.
- if (efl_isa(child, MY_CLASS))
- {
- Efl_Canvas_Vg_Container_Data *child_cd =
- efl_data_scope_get(child, MY_CLASS);
- if (child_cd->comp.src) continue;
- }
-
- //Skip Gradients. they will be updated by Shape.
- if (efl_isa(child, EFL_CANVAS_VG_GRADIENT_CLASS))
- continue;
-
- Efl_Canvas_Vg_Node_Data *child_nd =
- efl_data_scope_get(child, EFL_CANVAS_VG_NODE_CLASS);
-
- if (flag & EFL_GFX_CHANGE_FLAG_MATRIX)
- child_nd->flags |= EFL_GFX_CHANGE_FLAG_MATRIX;
-
- // Note: If Vg.Container has transparency, this is calculated by _evas_vg_render in Efl.Canvas.Vg.Object.
- // Therefore, there is no need to propagate the transparency of the container to the child.
- // However, if there is a composition target, the child must refer to the parent's opacity.
- // Because _evas_vg_render does not support opacity calculation for containers that need to be composited.
- // These things need to be refactored in a better way later.
- c_a = !comp ? 255 : c_a;
-
- _evas_vg_render_pre(vg_pd, child,
- engine, output, context, surface,
- ctransform, c_a, comp, comp_method);
- }
-}
-
static Eo *
_efl_canvas_vg_container_efl_object_constructor(Eo *obj,
Efl_Canvas_Vg_Container_Data *pd)
efl_gfx_color_set(obj, 255, 255, 255, 255);
pd->scene = tvg_scene_new();
- nd->render_pre_tvg = _efl_canvas_vg_container_render_pre_tvg;
+ nd->render_pre = _efl_canvas_vg_container_render_pre;
return obj;
}
}
static void
-_gradient_linear_render_pre_tvg(Efl_Canvas_Vg_Gradient_Data *gd,
+_gradient_linear_render_pre(Efl_Canvas_Vg_Gradient_Data *gd,
Tvg_Paint *shape,
Evas_Vg_Gradient_Owner_Type owner)
{
nd = efl_data_scope_get(obj, EFL_CANVAS_VG_NODE_CLASS);
if (!nd) return NULL;
- gd->gradient_render_pre_tvg = _gradient_linear_render_pre_tvg;
+ gd->gradient_render_pre = _gradient_linear_render_pre;
gd->spread = EFL_GFX_GRADIENT_SPREAD_PAD;
gd->gradient = tvg_linear_gradient_new();
nd->data = pd;
}
static void
-_gradient_radial_render_pre_tvg(Efl_Canvas_Vg_Gradient_Data *gd,
+_gradient_radial_render_pre(Efl_Canvas_Vg_Gradient_Data *gd,
Tvg_Paint *shape,
Evas_Vg_Gradient_Owner_Type owner)
{
gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS);
if (!gd) return NULL;
- gd->gradient_render_pre_tvg = _gradient_radial_render_pre_tvg;
+ gd->gradient_render_pre = _gradient_radial_render_pre;
gd->spread = EFL_GFX_GRADIENT_SPREAD_PAD;
gd->gradient = tvg_radial_gradient_new();
nd->data = pd;
typedef struct _Efl_Canvas_Vg_Image_Data Efl_Canvas_Vg_Image_Data;
struct _Efl_Canvas_Vg_Image_Data
{
-#ifndef HAVE_THORVG
- Ector_Buffer *buffer;
-#else
Tvg_Paint *picture;
-#endif
void *image;
int w;
int h;
};
-#ifndef HAVE_THORVG
static void
-_efl_canvas_vg_image_render_pre(Evas_Object_Protected_Data *vg_pd,
- Efl_VG *obj EINA_UNUSED,
- Efl_Canvas_Vg_Node_Data *nd,
- void *engine EINA_UNUSED, void *output EINA_UNUSED, void *context EINA_UNUSED,
- Ector_Surface *surface,
- Eina_Matrix3 *ptransform,
- int p_opacity,
- Ector_Buffer *comp,
- Efl_Gfx_Vg_Composite_Method comp_method,
- void *data)
-{
- Efl_Canvas_Vg_Image_Data *pd = data;
- int a;
-
- if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return;
-
- efl_gfx_color_get(obj, NULL, NULL, NULL, &a);
- if (a <= 0) return;
-
- nd->flags = EFL_GFX_CHANGE_FLAG_NONE;
-
- EFL_CANVAS_VG_COMPUTE_MATRIX(ctransform, ptransform, nd);
- EFL_CANVAS_VG_COMPUTE_ALPHA(c_r, c_g, c_b, c_a, p_opacity, nd);
-
- if (!nd->renderer)
- {
- efl_domain_current_push(EFL_ID_DOMAIN_SHARED);
- nd->renderer = ector_surface_renderer_factory_new(surface, ECTOR_RENDERER_IMAGE_MIXIN);
- efl_domain_current_pop();
- }
-
- if (!pd->buffer && pd->image)
- {
- Evas_Object_Protected_Data *obj = vg_pd;
- pd->buffer = ENFN->ector_buffer_new(ENC, obj->layer->evas->evas,
- pd->w, pd->h,
- EFL_GFX_COLORSPACE_ARGB8888,
- ECTOR_BUFFER_FLAG_DRAWABLE |
- ECTOR_BUFFER_FLAG_CPU_READABLE |
- ECTOR_BUFFER_FLAG_CPU_WRITABLE);
- ector_buffer_pixels_set(pd->buffer, pd->image,
- pd->w, pd->h, 0,
- EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE);
- }
- ector_renderer_image_buffer_set(nd->renderer, pd->buffer);
- ector_renderer_transformation_set(nd->renderer, ctransform);
- ector_renderer_origin_set(nd->renderer, nd->x, nd->y);
- ector_renderer_color_set(nd->renderer, c_r, c_g, c_b, c_a);
- ector_renderer_visibility_set(nd->renderer, nd->visibility);
- ector_renderer_comp_method_set(nd->renderer, comp, comp_method);
- ector_renderer_prepare(nd->renderer);
-}
-#endif
-
-#ifdef HAVE_THORVG
-static void
-_efl_canvas_vg_image_render_pre_tvg(EINA_UNUSED Evas_Object_Protected_Data *vg_pd,
+_efl_canvas_vg_image_render_pre(EINA_UNUSED Evas_Object_Protected_Data *vg_pd,
Efl_VG *obj,
Efl_Canvas_Vg_Node_Data *nd,
Eina_Matrix3 *pTransform,
if (scene) tvg_scene_push(scene, pd->picture);
else if (canvas) tvg_canvas_push(canvas, pd->picture);
}
-#endif
static Eo *
_efl_canvas_vg_image_efl_object_constructor(Eo *obj, Efl_Canvas_Vg_Image_Data *pd)
nd = efl_data_scope_get(obj, EFL_CANVAS_VG_NODE_CLASS);
nd->data = pd;
-#ifndef HAVE_THORVG
nd->render_pre = _efl_canvas_vg_image_render_pre;
-#else
- nd->render_pre_tvg = _efl_canvas_vg_image_render_pre_tvg;
-#endif
efl_gfx_color_set(obj , 255, 255, 255, 255);
_efl_canvas_vg_image_efl_object_destructor(Eo *obj, Efl_Canvas_Vg_Image_Data *pd EINA_UNUSED)
{
efl_destructor(efl_super(obj, MY_CLASS));
-
-#ifndef HAVE_THORVG
- if (pd->buffer)
- {
- efl_unref(pd->buffer);
- pd->buffer = NULL;
- }
-#endif
}
static void
if (!data || size.w <= 0 || size.h <= 0)
return;
-#ifndef HAVE_THORVG
- if ((pd->image != data || pd->w != size.w || pd->h != size.h) && pd->buffer)
- {
- efl_unref(pd->buffer);
- pd->buffer= NULL;
- }
-#endif
-
pd->image = data;
pd->w = size.w;
pd->h = size.h;
if (!efl_isa(root, EFL_CANVAS_VG_GRADIENT_CLASS))
{
Efl_Canvas_Vg_Node_Data *nd = efl_data_scope_get(root, EFL_CANVAS_VG_NODE_CLASS);
- if (nd) nd->render_pre_tvg(obj, root, nd, NULL, pd->tvg_canvas, NULL);
+ if (nd) nd->render_pre(obj, root, nd, NULL, pd->tvg_canvas, NULL);
}
tvg_canvas_update(pd->tvg_canvas);
efl_unref(tmp);
Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(pd->fill, EFL_CANVAS_VG_GRADIENT_CLASS);
- if (gd) gd->gradient_render_pre_tvg(gd, pd->shape, EVAS_VG_GRADIENT_OWNER_TYPE_SHAPE);
+ if (gd) gd->gradient_render_pre(gd, pd->shape, EVAS_VG_GRADIENT_OWNER_TYPE_SHAPE);
}
static Efl_Canvas_Vg_Node *
efl_unref(tmp);
Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(pd->stroke.fill, EFL_CANVAS_VG_GRADIENT_CLASS);
- if (gd) gd->gradient_render_pre_tvg(gd, pd->shape, EVAS_VG_GRADIENT_OWNER_TYPE_STROKE);
+ if (gd) gd->gradient_render_pre(gd, pd->shape, EVAS_VG_GRADIENT_OWNER_TYPE_STROKE);
}
static Efl_Canvas_Vg_Node *
}
static void
-_efl_canvas_vg_shape_render_pre_tvg(EINA_UNUSED Evas_Object_Protected_Data *vg_pd,
+_efl_canvas_vg_shape_render_pre(EINA_UNUSED Evas_Object_Protected_Data *vg_pd,
Efl_VG *obj,
Efl_Canvas_Vg_Node_Data *nd,
Eina_Matrix3 *pTransform,
if (gd)
{
gd->shape = obj;
- gd->gradient_render_pre_tvg(gd, sd->shape, EVAS_VG_GRADIENT_OWNER_TYPE_SHAPE);
+ gd->gradient_render_pre(gd, sd->shape, EVAS_VG_GRADIENT_OWNER_TYPE_SHAPE);
}
}
obj = efl_constructor(efl_super(obj, MY_CLASS));
nd = efl_data_scope_get(obj, EFL_CANVAS_VG_NODE_CLASS);
- nd->render_pre_tvg = _efl_canvas_vg_shape_render_pre_tvg;
+ nd->render_pre = _efl_canvas_vg_shape_render_pre;
pd->shape = tvg_shape_new();
pd->scale = 1.0;
pd->width = 0;
free(pseat);
}
- /* Ector surface may require an existing output to finish its job */
- if (e->engine.func)
- e->engine.func->ector_destroy(_evas_engine_context(e), e->ector);
/* cleanup engine backend */
EINA_LIST_FREE(e->outputs, evo) efl_canvas_output_del(evo);
if (e->engine.func)
return efl_main_loop_get();
}
-Ector_Surface *
-evas_ector_get(Evas_Public_Data *e)
-{
- if (!e->ector)
- e->ector = e->engine.func->ector_create(_evas_engine_context(e));
- return e->ector;
-}
-
EAPI Evas_BiDi_Direction
evas_language_direction_get(void)
{
Efl_VG *vg_obj;
Efl_Canvas_Vg_Object_Data *vd;
- void (*render_pre_tvg)(Evas_Object_Protected_Data *vg_pd, Efl_VG *node, Efl_Canvas_Vg_Node_Data *nd, Eina_Matrix3 *ptransform, void *canvas, void *scene);
-
- void (*render_pre)(Evas_Object_Protected_Data *vg_pd, Efl_VG *node,
- Efl_Canvas_Vg_Node_Data *nd,
- void *engine, void *output, void *contenxt, Ector_Surface *surface,
- Eina_Matrix3 *ptransform, int opacity, Ector_Buffer *comp, Efl_Gfx_Vg_Composite_Method comp_method, void *data);
+ void (*render_pre)(Evas_Object_Protected_Data *vg_pd, Efl_VG *node, Efl_Canvas_Vg_Node_Data *nd, Eina_Matrix3 *ptransform, void *canvas, void *scene);
void *data;
Tvg_Gradient *gradient;
Evas_Vg_Shape *shape;
- void (*gradient_render_pre_tvg)(Efl_Canvas_Vg_Gradient_Data *gd, Tvg_Paint *shape, Evas_Vg_Gradient_Owner_Type owner);
+ void (*gradient_render_pre)(Efl_Canvas_Vg_Gradient_Data *gd, Tvg_Paint *shape, Evas_Vg_Gradient_Owner_Type owner);
};
struct _Efl_Canvas_Vg_Interpolation
evas_object_change(vd->obj->object, vd->obj);
}
-static inline Efl_Canvas_Vg_Node_Data *
-_evas_vg_render_pre(Evas_Object_Protected_Data *vg_pd, Efl_VG *child,
- void *engine, void *output, void *context,
- Ector_Surface *surface,
- Eina_Matrix3 *transform,
- int opacity,
- Ector_Buffer *comp, Efl_Gfx_Vg_Composite_Method comp_method)
-{
- if (!child) return NULL;
- Efl_Canvas_Vg_Node_Data *nd = efl_data_scope_get(child, EFL_CANVAS_VG_NODE_CLASS);
- if (nd) nd->render_pre(vg_pd, child, nd,
- engine, output, context, surface,
- transform, opacity, comp, comp_method, nd->data);
- return nd;
-}
#define EFL_CANVAS_VG_COMPUTE_MATRIX(Current, Parent, Nd) \
Eina_Matrix3 *Current = Nd->m; \
Eina_Array *cur_device;
void *backend;
- Ector_Surface *ector;
Eina_List *outputs;
Evas_Device *default_seat;
void (*context_flush) (void *engine);
- Ector_Surface *(*ector_create) (void *engine);
- void (*ector_destroy) (void *engine, Ector_Surface *surface);
Ector_Buffer *(*ector_buffer_wrap) (void *engine, Evas *e, void *engine_image);
Ector_Buffer *(*ector_buffer_new) (void *engine, Evas *e, int width, int height, Efl_Gfx_Colorspace cspace, Ector_Buffer_Flag flags);
- Eina_Bool (*ector_begin) (void *engine, void *output, void *context, Ector_Surface *ector, int x, int y, Eina_Bool do_async);
- void (*ector_renderer_draw) (void *engine, void *output, void *context, Ector_Renderer *r, Eina_Array *clips, Eina_Bool do_async);
- void (*ector_end) (void *engine, void *output, void *context, Ector_Surface *ector, Eina_Bool do_async);
-
- void *(*ector_surface_create) (void *engine, int w, int h, int *error);
- void (*ector_surface_destroy) (void *engine, void *surface);
- void (*ector_surface_cache_set) (void *engine, void *key, void *surface);
- void *(*ector_surface_cache_get) (void *engine, void *key);
- void (*ector_surface_cache_drop) (void *engine, void *key);
Evas_Filter_Support (*gfx_filter_supports) (void *engine, Evas_Filter_Command *cmd);
Eina_Bool (*gfx_filter_process) (void *engine, Evas_Filter_Command *cmd);
void _efl_gfx_mapping_shutdown(void);
void _efl_gfx_mapping_update(Eo *eo_obj);
-/* Ector */
-Ector_Surface *evas_ector_get(Evas_Public_Data *evas);
-
/* Filter functions */
Eina_Bool evas_filter_object_render(Eo *eo_obj, Evas_Object_Protected_Data *obj, void *engine, void *output, void *context, void *surface, int x, int y, Eina_Bool do_async, Eina_Bool alpha);
static Eina_Bool use_gl = EINA_FALSE;
-static Ector_Surface *
-eng_ector_create(void *engine EINA_UNUSED)
-{
- Ector_Surface *ector;
- const char *ector_backend;
- ector_backend = getenv("ECTOR_BACKEND");
- efl_domain_current_push(EFL_ID_DOMAIN_SHARED);
- if (ector_backend && !strcasecmp(ector_backend, "gl"))
- {
- ector = efl_add_ref(ECTOR_GL_SURFACE_CLASS, NULL);
- use_gl = EINA_TRUE;
- }
-
- efl_domain_current_pop();
- return ector;
-}
-
-static void
-eng_ector_destroy(void *engine EINA_UNUSED, Ector_Surface *ector)
-{
- if (ector) efl_unref(ector);
-}
-
static Ector_Buffer *
eng_ector_buffer_wrap(void *engine EINA_UNUSED, Evas *evas, void *engine_image)
{
}
}
-static void
-eng_ector_renderer_draw(void *engine EINA_UNUSED, void *surface,
- void *context EINA_UNUSED, Ector_Renderer *renderer,
- Eina_Array *clips EINA_UNUSED, Eina_Bool do_async EINA_UNUSED)
-{
- if (use_gl)
- {
- //FIXME no implementation yet
- }
- else
- {
- int w, h;
- Eina_Rectangle *r;
- Eina_Array *c = eina_array_new(4);
- Evas_GL_Image *glimg = surface;
-
- eng_image_size_get(engine, glimg, &w, &h);
- eina_array_push(c, eina_rectangle_new(0, 0, w, h));
-
- ector_renderer_draw(renderer, EFL_GFX_RENDER_OP_BLEND, c, 0xffffffff);
-
- while ((r = eina_array_pop(c)))
- eina_rectangle_free(r);
- eina_array_free(c);
-
- }
-}
-
-// Ector functions start
-static void*
-eng_ector_surface_create(void *engine, int width, int height, int *error)
-{
- void *surface;
-
- *error = EINA_FALSE;
-
- if (use_gl)
- {
- surface = evas_gl_common_image_surface_new(gl_generic_context_get(engine, EINA_TRUE),
- width, height, EINA_TRUE, EINA_FALSE);
- if (!surface) *error = EINA_TRUE;
- }
- else
- {
- surface = eng_image_new_from_copied_data(engine, width, height, NULL, EINA_TRUE, EVAS_COLORSPACE_ARGB8888);
- if (!surface)
- *error = EINA_TRUE;
- else //Use this hint for ZERO COPY texture upload.
- eng_image_content_hint_set(engine, surface, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
- }
-
- return surface;
-}
-
-static void
-eng_ector_surface_destroy(void *engine, void *surface)
-{
- if (!surface) return;
- eng_image_free(engine, surface);
-}
-
-static void
-eng_ector_surface_cache_set(void *engine, void *key , void *surface)
-{
- Render_Engine_GL_Generic *e = engine;
-
- generic_cache_data_set(e->software.surface_cache, key, surface);
-
-}
-
-static void *
-eng_ector_surface_cache_get(void *engine, void *key)
-{
- Render_Engine_GL_Generic *e = engine;
-
- return generic_cache_data_get(e->software.surface_cache, key);
-}
-
-static void
-eng_ector_surface_cache_drop(void *engine, void *key)
-{
- Render_Engine_GL_Generic *e = engine;
-
- generic_cache_data_drop(e->software.surface_cache, key);
-}
-
-static Eina_Bool
-eng_ector_begin(void *engine, void *surface,
- void *context EINA_UNUSED, Ector_Surface *ector,
- int x, int y, Eina_Bool do_async EINA_UNUSED)
-{
- if (use_gl)
- {
- //FIXME: No implementation yet
- return EINA_FALSE;
- }
- else
- {
- int w, h, stride;
- Evas_GL_Image *glim = surface;
- DATA32 *pixels;
- int load_err;
-
- glim = eng_image_data_get(engine, glim, EINA_TRUE, &pixels, &load_err,NULL);
- if (!glim || !pixels) return EINA_FALSE;
- eng_image_stride_get(engine, glim, &stride);
- eng_image_size_get(engine, glim, &w, &h);
-
- memset(pixels, 0, stride * h);
-
- // it just uses the software backend to draw for now
- ector_buffer_pixels_set(ector, pixels, w, h, stride, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE);
- ector_surface_reference_point_set(ector, x, y);
- }
- return EINA_TRUE;
-}
-
-static void
-eng_ector_end(void *engine,
- void *surface,
- void *context EINA_UNUSED,
- Ector_Surface *ector,
- Eina_Bool do_async EINA_UNUSED)
-{
- if (use_gl)
- {
- //FIXME: No implementation yet
- }
- else
- {
- Evas_GL_Image *glim = surface;
- DATA32 *pixels;
- int load_err;
-
- glim = eng_image_data_get(engine, glim, EINA_FALSE, &pixels, &load_err,NULL);
-
- eng_image_data_put(engine, glim, pixels);
- eng_image_data_put(engine, glim, pixels);
- ector_buffer_pixels_set(ector, NULL, 0, 0, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE);
- evas_common_cpu_end_opt();
-
- }
-}
-
static Eina_Bool
eng_image_data_map(void *engine, void **image, Eina_Rw_Slice *slice,
int *stride, int x, int y, int w, int h,
}
ector_init();
- ector_glsym_set(dlsym, RTLD_DEFAULT);
/* store it for later use */
func = pfunc;
ORD(context_flush);
- ORD(ector_create);
- ORD(ector_destroy);
ORD(ector_buffer_wrap);
ORD(ector_buffer_new);
- ORD(ector_begin);
- ORD(ector_renderer_draw);
- ORD(ector_end);
- ORD(ector_surface_create);
- ORD(ector_surface_destroy);
- ORD(ector_surface_cache_set);
- ORD(ector_surface_cache_get);
- ORD(ector_surface_cache_drop);
ORD(gfx_filter_supports);
ORD(gfx_filter_process);
ORD(font_glyphs_gc_collect);
typedef struct _Evas_Thread_Command_Font Evas_Thread_Command_Font;
typedef struct _Evas_Thread_Command_Map Evas_Thread_Command_Map;
typedef struct _Evas_Thread_Command_Multi_Font Evas_Thread_Command_Multi_Font;
-typedef struct _Evas_Thread_Command_Ector Evas_Thread_Command_Ector;
-typedef struct _Evas_Thread_Command_Ector_Surface Evas_Thread_Command_Ector_Surface;
struct _Evas_Thread_Command_Rect
{
Evas_Font_Array *texts;
};
-struct _Evas_Thread_Command_Ector
-{
- Ector_Renderer *r;
- Eina_Array *clips;
-
- DATA32 mul_col;
- Efl_Gfx_Render_Op render_op;
-
- Eina_Bool free_it;
-};
-
// declare here as it is re-used
static void *eng_image_map_surface_new(void *data, int w, int h, int alpha);
// Ector functions
-static Ector_Surface *
-eng_ector_create(void *engine EINA_UNUSED)
-{
- return NULL;
-}
-
-static void*
-eng_ector_surface_create(void *engine EINA_UNUSED, int width EINA_UNUSED, int height EINA_UNUSED, int *error EINA_UNUSED)
-{
- return NULL;
-}
-
-static void
-eng_ector_surface_destroy(void *engine EINA_UNUSED, void *surface EINA_UNUSED)
-{
-}
-
-static void
-eng_ector_surface_cache_set(void *engine EINA_UNUSED, void *key EINA_UNUSED, void *surface EINA_UNUSED)
-{
-}
-
-static void *
-eng_ector_surface_cache_get(void *engine EINA_UNUSED, void *key EINA_UNUSED)
-{
- return NULL;
-}
-
-static void
-eng_ector_surface_cache_drop(void *engine EINA_UNUSED, void *key EINA_UNUSED)
-{
-}
-
-static void
-eng_ector_destroy(void *data EINA_UNUSED, Ector_Surface *ector EINA_UNUSED)
-{
-}
-
static Ector_Buffer *
eng_ector_buffer_wrap(void *data, Evas *e EINA_UNUSED, void *engine_image)
{
return buf;
}
-static void
-eng_ector_renderer_draw(void *engine EINA_UNUSED, void *surface EINA_UNUSED,
- void *context EINA_UNUSED, Ector_Renderer *renderer EINA_UNUSED,
- Eina_Array *clips EINA_UNUSED, Eina_Bool do_async EINA_UNUSED)
-{
-}
-
-static Eina_Bool
-eng_ector_begin(void *engine EINA_UNUSED, void *surface EINA_UNUSED,
- void *context EINA_UNUSED, Ector_Surface *ector EINA_UNUSED,
- int x EINA_UNUSED, int y EINA_UNUSED, Eina_Bool do_async EINA_UNUSED)
-{
- return EINA_TRUE;
-}
-
-static void
-eng_ector_end(void *engine EINA_UNUSED,
- void *surface EINA_UNUSED,
- void *context EINA_UNUSED,
- Ector_Surface *ector EINA_UNUSED,
- Eina_Bool do_async EINA_UNUSED)
-{
-}
-
//------------------------------------------------//
static Software_Filter_Func
eng_multi_font_draw,
eng_pixel_alpha_get,
NULL, // eng_context_flush - software doesn't use it
- eng_ector_create,
- eng_ector_destroy,
eng_ector_buffer_wrap,
eng_ector_buffer_new,
- eng_ector_begin,
- eng_ector_renderer_draw,
- eng_ector_end,
- eng_ector_surface_create,
- eng_ector_surface_destroy,
- eng_ector_surface_cache_set,
- eng_ector_surface_cache_get,
- eng_ector_surface_cache_drop,
eng_gfx_filter_supports,
eng_gfx_filter_process,
/* FUTURE software generic calls go here */