forked from enlightenment/efl
[E-devel] [Patch] evas_gl_shader patch for get_program_binary extension
from gl77.lee@samsung.com Dear all, I attached a patch of evas_gl_shader. I've removed a comment which is creating dummy shader when using GL_OES_get_program_binary extension. Mr. Haegeun Park who is in charge of GPU driver fixed get_program_binary bug in the SGX driver. There's no need to create dummy shaders any longer. And I've added link status checking code to validate the binary object. Please review this patch. Thanks. SVN revision: 61309
This commit is contained in:
parent
7a64f6312b
commit
cf4ed126c4
|
@ -756,6 +756,7 @@ _evas_gl_common_shader_program_binary_init(Evas_GL_Program *p,
|
|||
int res = 0, num = 0, length = 0;
|
||||
int *formats = NULL;
|
||||
void *data = NULL;
|
||||
GLint ok = 0;
|
||||
|
||||
if (!ef) return res;
|
||||
|
||||
|
@ -773,15 +774,6 @@ _evas_gl_common_shader_program_binary_init(Evas_GL_Program *p,
|
|||
|
||||
p->prog = glCreateProgram();
|
||||
|
||||
#if 0
|
||||
// TODO: invalid rendering error occurs when attempting to use a
|
||||
// glProgramBinary. in order to render correctly we should create a dummy
|
||||
// vertex shader.
|
||||
p->vert = glCreateShader(GL_VERTEX_SHADER);
|
||||
glAttachShader(p->prog, p->vert);
|
||||
p->frag = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
glAttachShader(p->prog, p->frag);
|
||||
#endif
|
||||
glsym_glProgramBinary(p->prog, formats[0], data, length);
|
||||
|
||||
glBindAttribLocation(p->prog, SHAD_VERTEX, "vertex");
|
||||
|
@ -790,6 +782,16 @@ _evas_gl_common_shader_program_binary_init(Evas_GL_Program *p,
|
|||
glBindAttribLocation(p->prog, SHAD_TEXUV2, "tex_coord2");
|
||||
glBindAttribLocation(p->prog, SHAD_TEXUV3, "tex_coord3");
|
||||
glBindAttribLocation(p->prog, SHAD_TEXM, "tex_coordm");
|
||||
|
||||
glGetProgramiv(p->prog, GL_LINK_STATUS, &ok);
|
||||
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
||||
if (!ok)
|
||||
{
|
||||
gl_compile_link_error(p->prog, "load a program object");
|
||||
ERR("Abort load of program (%s)", pname);
|
||||
goto finish;
|
||||
}
|
||||
|
||||
res = 1;
|
||||
|
||||
finish:
|
||||
|
@ -810,7 +812,7 @@ _evas_gl_common_shader_program_binary_save(Evas_GL_Program *p,
|
|||
{
|
||||
void* data = NULL;
|
||||
GLenum format;
|
||||
int length = 0;
|
||||
int length = 0, size = 0;
|
||||
|
||||
if (!glsym_glGetProgramBinary) return 0;
|
||||
|
||||
|
@ -821,9 +823,15 @@ _evas_gl_common_shader_program_binary_save(Evas_GL_Program *p,
|
|||
data = malloc(length);
|
||||
if (!data) return 0;
|
||||
|
||||
glsym_glGetProgramBinary(p->prog, length, NULL, &format, data);
|
||||
glsym_glGetProgramBinary(p->prog, length, &size, &format, data);
|
||||
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
||||
|
||||
if (length != size)
|
||||
{
|
||||
free(data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (eet_write(ef, pname, data, length, 0) < 0)
|
||||
{
|
||||
if (data) free(data);
|
||||
|
|
Loading…
Reference in New Issue