Fixed a bug where if an image object rendered using Evas GL

direct rendering and then another image object using Native
Surface rendering, there was a potential for it to fall into
the same direct rendering path.

Also, fixed some minor Evas GL extension bugs that came from refactoring.



SVN revision: 79532
This commit is contained in:
Sung Park 2012-11-22 07:58:06 +00:00
parent abb71f7234
commit 57f2e02b9e
4 changed files with 38 additions and 12 deletions

View File

@ -1,3 +1,12 @@
2012-11-22 Sung W. Park (sung_)
* Fixed a bug where if an image object rendered using Evas GL
direct rendering and then another image object using Native
Surface rendering, there was a potential for it to fall into
the same direct rendering path.
* Fixed some minor Evas GL extension bugs that came from refactoring.
2012-11-21 Carsten Haitzler (The Rasterman)
* Fixed leak in textblock and text props in general that made

View File

@ -151,7 +151,8 @@ re->info->info.screen);
#define _EVASGL_EXT_BEGIN(name) \
{ \
int *ext_support = &_gl_ext_support_##name;
int *ext_support = &_gl_ext_support_##name; \
*ext_support = 0;
#define _EVASGL_EXT_END() \
}
@ -160,7 +161,7 @@ re->info->info.screen);
(strstr(glexts, #name) != NULL || strstr(glueexts, #name) != NULL)
#define _EVASGL_EXT_DISCARD_SUPPORT() \
ext_support = 0;
*ext_support = 0;
#define _EVASGL_EXT_DRVNAME(name) \
if (_EVASGL_EXT_CHECK_SUPPORT(name)) *ext_support = 1;
@ -174,7 +175,7 @@ re->info->info.screen);
}
#define _EVASGL_EXT_FUNCTION_DRVFUNC(name) \
*drvfunc = name;
if ((*drvfunc) == NULL) *drvfunc = name;
#include "evas_gl_api_ext_def.h"

View File

@ -52,9 +52,11 @@ _EVASGL_EXT_BEGIN(get_program_binary)
_EVASGL_EXT_FUNCTION_BEGIN(void, glGetProgramBinaryOES, (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glGetProgramBinary"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glGetProgramBinaryOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glProgramBinaryOES, (GLuint program, GLenum binaryFormat, const void *binary, GLint length))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glProgramBinary"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glProgramBinaryOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_END()
@ -64,12 +66,15 @@ _EVASGL_EXT_BEGIN(mapbuffer)
_EVASGL_EXT_FUNCTION_BEGIN(void *, glMapBufferOES, (GLenum target, GLenum access))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glMapBuffer"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glMapBufferOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(GLboolean, glUnmapBufferOES, (GLenum target))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glUnmapBuffer"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glUnmapBufferOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glGetBufferPointervOES, (GLenum target, GLenum pname, void** params))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glGetBufferPointerv"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glGetBufferPointervOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_END()
@ -78,21 +83,27 @@ _EVASGL_EXT_BEGIN(texture_3D)
_EVASGL_EXT_FUNCTION_BEGIN(void, glTexImage3DOES, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glTexImage3D"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glTexImage3DOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glTexSubImage3D"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glTexSubImage3DOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glCopyTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glCopyTexSubImage3D"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glCopyTexSubImage3DOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glCompressedTexImage3DOES, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glCompressedTexImage3D"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glCompressedTexImage3DOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glCompressedTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glCompressedTexSubImage3D"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glCompressedTexSubImage3DOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glFramebufferTexture3DOES, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glFramebufferTexture3D"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glFramebufferTexture3DOES"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_END()
@ -141,6 +152,7 @@ _EVASGL_EXT_BEGIN(discard_framebuffer)
_EVASGL_EXT_FUNCTION_BEGIN(void, glDiscardFramebufferEXT, (GLenum target, GLsizei numAttachments, const GLenum* attachments))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glDiscardFramebuffer"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glDiscardFramebufferEXT"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_END()
@ -150,8 +162,11 @@ _EVASGL_EXT_BEGIN(multi_draw_arrays)
_EVASGL_EXT_FUNCTION_BEGIN(void, glMultiDrawArraysEXT, (GLenum mode, GLint* first, GLsizei* count, GLsizei primcount))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glMultiDrawArrays"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glMultiDrawArraysEXT"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_FUNCTION_BEGIN(void, glMultiDrawElementsEXT, (GLenum mode, const GLsizei* count, GLenum type, const GLvoid** indices, GLsizei primcount))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glMultiDrawElements"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glMultiDrawElementsEXT"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glMultiDrawElementsARB"))
_EVASGL_EXT_FUNCTION_END()
_EVASGL_EXT_END()
@ -254,10 +269,12 @@ _EVASGL_EXT_BEGIN(multisampled_render_to_texture)
_EVASGL_EXT_DRVNAME(GL_EXT_multisampled_render_to_texture)
_EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(void, glRenderbufferStorageMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glRenderbufferStorageMultisample"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glRenderbufferStorageMultisampleIMG"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glRenderbufferStorageMultisampleEXT"))
_EVASGL_EXT_FUNCTION_PRIVATE_END()
_EVASGL_EXT_FUNCTION_PRIVATE_BEGIN(void, glFramebufferTexture2DMultisample, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glFramebufferTexture2DMultisample"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glFramebufferTexture2DMultisampleIMG"))
_EVASGL_EXT_FUNCTION_DRVFUNC(GETPROCADDR("glFramebufferTexture2DMultisampleEXT"))
_EVASGL_EXT_FUNCTION_PRIVATE_END()

View File

@ -41,7 +41,6 @@ struct _Render_Engine
static int initted = 0;
static int gl_wins = 0;
static int _ext_initted = 0;
typedef void (*_eng_fn) (void);
typedef _eng_fn (*glsym_func_eng_fn) ();
@ -513,7 +512,7 @@ static EVGL_Interface evgl_funcs =
static void
_ext_sym_init(void)
gl_symbols(void)
{
static int done = 0;
@ -584,6 +583,8 @@ _ext_sym_init(void)
FINDSYM(glsym_glXSwapIntervalEXT, "glXSwapIntervalEXT", glsym_func_void);
#endif
done = 1;
}
int _evas_engine_GL_X11_log_dom = -1;
@ -682,6 +683,8 @@ eng_setup(Evas *eo_e, void *in)
if (!initted)
{
gl_symbols();
evas_common_cpu_init();
evas_common_blend_init();
evas_common_image_init();
@ -834,12 +837,6 @@ eng_setup(Evas *eo_e, void *in)
re->vsync = 0;
if (!_ext_initted)
{
_ext_sym_init();
_ext_initted = 1 ;
}
return 1;
}
@ -2491,7 +2488,9 @@ eng_image_draw(void *data, void *context, void *surface, void *image, int src_x,
if (!im) return;
n = im->native.data;
if ((n) && (n->ns.type == EVAS_NATIVE_SURFACE_OPENGL) && (evgl_direct_rendered(re->evgl_engine)))
if ((n) && (n->ns.type == EVAS_NATIVE_SURFACE_OPENGL) &&
(n->ns.data.opengl.framebuffer_id == 0) &&
(evgl_direct_rendered(re->evgl_engine)))
{
DBG("Rendering Directly to the window");
evas_object_image_pixels_dirty_set(evgl_direct_img_obj_get(re->evgl_engine), EINA_TRUE);