734 lines
17 KiB
C
734 lines
17 KiB
C
#include "evas_gl_private.h"
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int rect_frag_bin[] =
|
|
{
|
|
# include "shader/rect_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char rect_frag_glsl[] =
|
|
#include "shader/rect_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_rect_frag_src =
|
|
{
|
|
rect_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
rect_frag_bin, sizeof(rect_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int rect_vert_bin[] =
|
|
{
|
|
# include "shader/rect_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char rect_vert_glsl[] =
|
|
#include "shader/rect_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_rect_vert_src =
|
|
{
|
|
rect_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
rect_vert_bin, sizeof(rect_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int font_frag_bin[] =
|
|
{
|
|
# include "shader/font_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char font_frag_glsl[] =
|
|
#include "shader/font_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_font_frag_src =
|
|
{
|
|
font_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
font_frag_bin, sizeof(font_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int font_vert_bin[] =
|
|
{
|
|
# include "shader/font_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char font_vert_glsl[] =
|
|
#include "shader/font_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_font_vert_src =
|
|
{
|
|
font_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
font_vert_bin, sizeof(font_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int yuv_frag_bin[] =
|
|
{
|
|
# include "shader/yuv_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char yuv_frag_glsl[] =
|
|
#include "shader/yuv_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_yuv_frag_src =
|
|
{
|
|
yuv_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
yuv_frag_bin, sizeof(yuv_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int yuv_vert_bin[] =
|
|
{
|
|
# include "shader/yuv_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char yuv_vert_glsl[] =
|
|
#include "shader/yuv_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_yuv_vert_src =
|
|
{
|
|
yuv_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
yuv_vert_bin, sizeof(yuv_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int yuv_nomul_frag_bin[] =
|
|
{
|
|
# include "shader/yuv_nomul_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char yuv_nomul_frag_glsl[] =
|
|
#include "shader/yuv_nomul_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_yuv_nomul_frag_src =
|
|
{
|
|
yuv_nomul_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
yuv_nomul_frag_bin, sizeof(yuv_nomul_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int yuv_nomul_vert_bin[] =
|
|
{
|
|
# include "shader/yuv_nomul_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char yuv_nomul_vert_glsl[] =
|
|
#include "shader/yuv_nomul_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_yuv_nomul_vert_src =
|
|
{
|
|
yuv_nomul_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
yuv_nomul_vert_bin, sizeof(yuv_nomul_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int tex_frag_bin[] =
|
|
{
|
|
# include "shader/tex_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char tex_frag_glsl[] =
|
|
#include "shader/tex_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_tex_frag_src =
|
|
{
|
|
tex_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
tex_frag_bin, sizeof(tex_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int tex_vert_bin[] =
|
|
{
|
|
# include "shader/tex_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char tex_vert_glsl[] =
|
|
#include "shader/tex_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_tex_vert_src =
|
|
{
|
|
tex_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
tex_vert_bin, sizeof(tex_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int tex_nomul_frag_bin[] =
|
|
{
|
|
# include "shader/tex_nomul_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char tex_nomul_frag_glsl[] =
|
|
#include "shader/tex_nomul_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_tex_nomul_frag_src =
|
|
{
|
|
tex_nomul_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
tex_nomul_frag_bin, sizeof(tex_nomul_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int tex_nomul_vert_bin[] =
|
|
{
|
|
# include "shader/tex_nomul_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char tex_nomul_vert_glsl[] =
|
|
#include "shader/tex_nomul_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_tex_nomul_vert_src =
|
|
{
|
|
tex_nomul_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
tex_nomul_vert_bin, sizeof(tex_nomul_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_frag_bin[] =
|
|
{
|
|
# include "shader/img_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char img_frag_glsl[] =
|
|
#include "shader/img_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_frag_src =
|
|
{
|
|
img_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_frag_bin, sizeof(img_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_vert_bin[] =
|
|
{
|
|
# include "shader/img_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char img_vert_glsl[] =
|
|
#include "shader/img_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_vert_src =
|
|
{
|
|
img_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_vert_bin, sizeof(img_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_nomul_frag_bin[] =
|
|
{
|
|
# include "shader/img_nomul_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char img_nomul_frag_glsl[] =
|
|
#include "shader/img_nomul_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_nomul_frag_src =
|
|
{
|
|
img_nomul_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_nomul_frag_bin, sizeof(img_nomul_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_nomul_vert_bin[] =
|
|
{
|
|
# include "shader/img_nomul_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char img_nomul_vert_glsl[] =
|
|
#include "shader/img_nomul_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_nomul_vert_src =
|
|
{
|
|
img_nomul_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_nomul_vert_bin, sizeof(img_nomul_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_bgra_frag_bin[] =
|
|
{
|
|
# include "shader/img_bgra_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char img_bgra_frag_glsl[] =
|
|
#include "shader/img_bgra_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_bgra_frag_src =
|
|
{
|
|
img_bgra_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_bgra_frag_bin, sizeof(img_bgra_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_bgra_vert_bin[] =
|
|
{
|
|
# include "shader/img_bgra_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char img_bgra_vert_glsl[] =
|
|
#include "shader/img_bgra_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_bgra_vert_src =
|
|
{
|
|
img_bgra_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_bgra_vert_bin, sizeof(img_bgra_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_mask_frag_bin[] =
|
|
{
|
|
# include "shader/img_mask_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char img_mask_frag_glsl[] =
|
|
#include "shader/img_mask_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_mask_frag_src =
|
|
{
|
|
img_mask_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_mask_frag_bin, sizeof(img_mask_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_mask_vert_bin[] =
|
|
{
|
|
# include "shader/img_mask_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char img_mask_vert_glsl[] =
|
|
#include "shader/img_mask_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_mask_vert_src =
|
|
{
|
|
img_mask_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_mask_vert_bin, sizeof(img_mask_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_bgra_nomul_frag_bin[] =
|
|
{
|
|
# include "shader/img_bgra_nomul_frag_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
|
|
const char img_bgra_nomul_frag_glsl[] =
|
|
#include "shader/img_bgra_nomul_frag.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_bgra_nomul_frag_src =
|
|
{
|
|
img_bgra_nomul_frag_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_bgra_nomul_frag_bin, sizeof(img_bgra_nomul_frag_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
const unsigned int img_bgra_nomul_vert_bin[] =
|
|
{
|
|
# include "shader/img_bgra_nomul_vert_bin_s3c6410.h"
|
|
};
|
|
#endif
|
|
const char img_bgra_nomul_vert_glsl[] =
|
|
#include "shader/img_bgra_nomul_vert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_img_bgra_nomul_vert_src =
|
|
{
|
|
img_bgra_nomul_vert_glsl,
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
img_bgra_nomul_vert_bin, sizeof(img_bgra_nomul_vert_bin)
|
|
#else
|
|
NULL, 0
|
|
#endif
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
const char filter_invert_frag_glsl[] =
|
|
#include "shader/filter_invert.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_invert_frag_src =
|
|
{
|
|
filter_invert_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_invert_nomul_frag_glsl[] =
|
|
#include "shader/filter_invert_nomul.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_invert_nomul_frag_src =
|
|
{
|
|
filter_invert_nomul_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_invert_bgra_frag_glsl[] =
|
|
#include "shader/filter_invert_bgra.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_invert_bgra_frag_src =
|
|
{
|
|
filter_invert_bgra_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
const char filter_invert_bgra_nomul_frag_glsl[] =
|
|
#include "shader/filter_invert_bgra_nomul.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_invert_bgra_nomul_frag_src =
|
|
{
|
|
filter_invert_bgra_nomul_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
const char filter_greyscale_frag_glsl[] =
|
|
#include "shader/filter_greyscale.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_greyscale_frag_src =
|
|
{
|
|
filter_greyscale_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_greyscale_nomul_frag_glsl[] =
|
|
#include "shader/filter_greyscale_nomul.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_greyscale_nomul_frag_src =
|
|
{
|
|
filter_greyscale_nomul_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_greyscale_bgra_frag_glsl[] =
|
|
#include "shader/filter_greyscale_bgra.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_greyscale_bgra_frag_src =
|
|
{
|
|
filter_greyscale_bgra_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
const char filter_greyscale_bgra_nomul_frag_glsl[] =
|
|
#include "shader/filter_greyscale_bgra_nomul.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_greyscale_bgra_nomul_frag_src =
|
|
{
|
|
filter_greyscale_bgra_nomul_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
const char filter_sepia_frag_glsl[] =
|
|
#include "shader/filter_sepia.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_sepia_frag_src =
|
|
{
|
|
filter_sepia_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_sepia_nomul_frag_glsl[] =
|
|
#include "shader/filter_sepia_nomul.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_sepia_nomul_frag_src =
|
|
{
|
|
filter_sepia_nomul_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_sepia_bgra_frag_glsl[] =
|
|
#include "shader/filter_sepia_bgra.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_sepia_bgra_frag_src =
|
|
{
|
|
filter_sepia_bgra_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
const char filter_sepia_bgra_nomul_frag_glsl[] =
|
|
#include "shader/filter_sepia_bgra_nomul.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_sepia_bgra_nomul_frag_src =
|
|
{
|
|
filter_sepia_bgra_nomul_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
/////////////////////////////////////////////
|
|
#if 0
|
|
Blur is a work in progress currently.
|
|
Mostly because GPUs are so hopeless.
|
|
const char filter_blur_vert_glsl[] =
|
|
#include "shader/filter_blur_vert.h"
|
|
;
|
|
|
|
Evas_GL_Program_Source shader_filter_blur_vert_src =
|
|
{
|
|
filter_blur_vert_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_blur_frag_glsl[] =
|
|
#include "shader/filter_blur.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_blur_frag_src =
|
|
{
|
|
filter_blur_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_blur_nomul_frag_glsl[] =
|
|
#include "shader/filter_blur_nomul.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_blur_nomul_frag_src =
|
|
{
|
|
filter_blur_nomul_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
const char filter_blur_bgra_frag_glsl[] =
|
|
#include "shader/filter_blur_bgra.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_blur_bgra_frag_src =
|
|
{
|
|
filter_blur_bgra_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
const char filter_blur_bgra_nomul_frag_glsl[] =
|
|
#include "shader/filter_blur_bgra_nomul.h"
|
|
;
|
|
Evas_GL_Program_Source shader_filter_blur_bgra_nomul_frag_src =
|
|
{
|
|
filter_blur_bgra_nomul_frag_glsl,
|
|
NULL, 0
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/////////////////////////////////////////////
|
|
static void
|
|
gl_compile_link_error(GLuint target, const char *action)
|
|
{
|
|
int loglen = 0, chars = 0;
|
|
char *logtxt;
|
|
|
|
/* Shader info log */
|
|
glGetShaderiv(target, GL_INFO_LOG_LENGTH, &loglen);
|
|
if (loglen > 0)
|
|
{
|
|
logtxt = calloc(loglen, sizeof(char));
|
|
if (logtxt)
|
|
{
|
|
glGetShaderInfoLog(target, loglen, &chars, logtxt);
|
|
ERR("Failed to %s: %s", action, logtxt);
|
|
free(logtxt);
|
|
}
|
|
}
|
|
|
|
/* Program info log */
|
|
glGetProgramiv(target, GL_INFO_LOG_LENGTH, &loglen);
|
|
if (loglen > 0)
|
|
{
|
|
logtxt = calloc(loglen, sizeof(char));
|
|
if (logtxt)
|
|
{
|
|
glGetProgramInfoLog(target, loglen, &chars, logtxt);
|
|
ERR("Failed to %s: %s", action, logtxt);
|
|
free(logtxt);
|
|
}
|
|
}
|
|
}
|
|
|
|
int
|
|
evas_gl_common_shader_program_init(Evas_GL_Program *p,
|
|
Evas_GL_Program_Source *vert,
|
|
Evas_GL_Program_Source *frag,
|
|
const char *name)
|
|
{
|
|
GLint ok;
|
|
|
|
p->vert = glCreateShader(GL_VERTEX_SHADER);
|
|
p->frag = glCreateShader(GL_FRAGMENT_SHADER);
|
|
#if defined (GLES_VARIETY_S3C6410)
|
|
glShaderBinary(1, &(p->vert), 0, vert->bin, vert->bin_size);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glShaderBinary(1, &(p->frag), 0, frag->bin, frag->bin_size);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
#else
|
|
glShaderSource(p->vert, 1,
|
|
(const char **)&(vert->src), NULL);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glCompileShader(p->vert);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
ok = 0;
|
|
glGetShaderiv(p->vert, GL_COMPILE_STATUS, &ok);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
if (!ok)
|
|
{
|
|
gl_compile_link_error(p->vert, "compile vertex shader");
|
|
ERR("Abort compile of shader vert (%s): %s", name, vert->src);
|
|
return 0;
|
|
}
|
|
glShaderSource(p->frag, 1,
|
|
(const char **)&(frag->src), NULL);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glCompileShader(p->frag);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
ok = 0;
|
|
glGetShaderiv(p->frag, GL_COMPILE_STATUS, &ok);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
if (!ok)
|
|
{
|
|
gl_compile_link_error(p->frag, "compile fragment shader");
|
|
ERR("Abort compile of shader frag (%s): %s", name, frag->src);
|
|
return 0;
|
|
}
|
|
#endif
|
|
p->prog = glCreateProgram();
|
|
glAttachShader(p->prog, p->vert);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glAttachShader(p->prog, p->frag);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
|
|
glBindAttribLocation(p->prog, SHAD_VERTEX, "vertex");
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glBindAttribLocation(p->prog, SHAD_COLOR, "color");
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glBindAttribLocation(p->prog, SHAD_TEXUV, "tex_coord");
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glBindAttribLocation(p->prog, SHAD_TEXUV2, "tex_coord2");
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glBindAttribLocation(p->prog, SHAD_TEXUV3, "tex_coord3");
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
glBindAttribLocation(p->prog, SHAD_TEXM, "tex_coordm");
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
|
|
glLinkProgram(p->prog);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
ok = 0;
|
|
glGetProgramiv(p->prog, GL_LINK_STATUS, &ok);
|
|
GLERR(__FUNCTION__, __FILE__, __LINE__, "");
|
|
if (!ok)
|
|
{
|
|
gl_compile_link_error(p->prog, "link fragment and vertex shaders");
|
|
ERR("Abort compile of shader frag (%s): %s", name, frag->src);
|
|
ERR("Abort compile of shader vert (%s): %s", name, vert->src);
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
void
|
|
evas_gl_common_shader_program_init_done(void)
|
|
{
|
|
#if defined (GLES_VARIETY_S3C6410) || defined (GLES_VARIETY_SGX)
|
|
glReleaseShaderCompiler();
|
|
#endif
|
|
}
|
|
|
|
void
|
|
evas_gl_common_shader_program_shutdown(Evas_GL_Program *p)
|
|
{
|
|
glDeleteShader(p->vert);
|
|
glDeleteShader(p->frag);
|
|
glDeleteProgram(p->prog);
|
|
}
|