cogl-shader: unifies the driver/{gl,gles} shader files
The per driver implementations of cogl-shader.c had become almost identical we now have a single cogl/cogl-shader.c instead.
This commit is contained in:
parent
6e176f94fa
commit
7705469d2b
@ -160,6 +160,8 @@ cogl_sources_c = \
|
|||||||
$(srcdir)/cogl-profile.c \
|
$(srcdir)/cogl-profile.c \
|
||||||
$(srcdir)/cogl-bitmask.h \
|
$(srcdir)/cogl-bitmask.h \
|
||||||
$(srcdir)/cogl-bitmask.c \
|
$(srcdir)/cogl-bitmask.c \
|
||||||
|
$(srcdir)/cogl-shader-private.h \
|
||||||
|
$(srcdir)/cogl-shader.c \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
# glib-mkenums rules
|
# glib-mkenums rules
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
* An object oriented GL/GLES Abstraction/Utility Layer
|
||||||
*
|
*
|
||||||
* Copyright (C) 2008,2009 Intel Corporation.
|
* Copyright (C) 2007,2008,2009,2010 Intel Corporation.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -26,13 +26,26 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "cogl.h"
|
#include "cogl.h"
|
||||||
|
|
||||||
#include "cogl-shader-private.h"
|
#include "cogl-shader-private.h"
|
||||||
#include "cogl-internal.h"
|
#include "cogl-internal.h"
|
||||||
#include "cogl-context.h"
|
#include "cogl-context.h"
|
||||||
#include "cogl-handle.h"
|
#include "cogl-handle.h"
|
||||||
|
|
||||||
#ifdef HAVE_COGL_GLES2
|
#include <glib.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_COGL_GL
|
||||||
|
#define glCreateShader ctx->drv.pf_glCreateShader
|
||||||
|
#define glGetShaderiv ctx->drv.pf_glGetShaderiv
|
||||||
|
#define glGetShaderInfoLog ctx->drv.pf_glGetShaderInfoLog
|
||||||
|
#define glCompileShader ctx->drv.pf_glCompileShader
|
||||||
|
#define glShaderSource ctx->drv.pf_glShaderSource
|
||||||
|
#define glDeleteShader ctx->drv.pf_glDeleteShader
|
||||||
|
#define GET_CONTEXT _COGL_GET_CONTEXT
|
||||||
|
#else
|
||||||
|
#define GET_CONTEXT(CTXVAR,RETVAL) G_STMT_START { } G_STMT_END
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_COGL_GLES
|
||||||
|
|
||||||
static void _cogl_shader_free (CoglShader *shader);
|
static void _cogl_shader_free (CoglShader *shader);
|
||||||
|
|
||||||
@ -56,6 +69,8 @@ cogl_create_shader (CoglShaderType type)
|
|||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
GLenum gl_type;
|
GLenum gl_type;
|
||||||
|
|
||||||
|
GET_CONTEXT (ctx, COGL_INVALID_HANDLE);
|
||||||
|
|
||||||
if (type == COGL_SHADER_TYPE_VERTEX)
|
if (type == COGL_SHADER_TYPE_VERTEX)
|
||||||
gl_type = GL_VERTEX_SHADER;
|
gl_type = GL_VERTEX_SHADER;
|
||||||
else if (type == COGL_SHADER_TYPE_FRAGMENT)
|
else if (type == COGL_SHADER_TYPE_FRAGMENT)
|
||||||
@ -109,7 +124,8 @@ cogl_shader_get_info_log (CoglHandle handle)
|
|||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
char buffer[512];
|
char buffer[512];
|
||||||
int len = 0;
|
int len = 0;
|
||||||
_COGL_GET_CONTEXT (ctx, NULL);
|
|
||||||
|
GET_CONTEXT (ctx, NULL);
|
||||||
|
|
||||||
if (!cogl_is_shader (handle))
|
if (!cogl_is_shader (handle))
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -127,6 +143,8 @@ cogl_shader_get_type (CoglHandle handle)
|
|||||||
{
|
{
|
||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
|
|
||||||
|
GET_CONTEXT (ctx, COGL_SHADER_TYPE_VERTEX);
|
||||||
|
|
||||||
if (!cogl_is_shader (handle))
|
if (!cogl_is_shader (handle))
|
||||||
{
|
{
|
||||||
g_warning ("Non shader handle type passed to cogl_shader_get_type");
|
g_warning ("Non shader handle type passed to cogl_shader_get_type");
|
||||||
@ -143,6 +161,8 @@ cogl_shader_is_compiled (CoglHandle handle)
|
|||||||
GLint status;
|
GLint status;
|
||||||
CoglShader *shader;
|
CoglShader *shader;
|
||||||
|
|
||||||
|
GET_CONTEXT (ctx, FALSE);
|
||||||
|
|
||||||
if (!cogl_is_shader (handle))
|
if (!cogl_is_shader (handle))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
@ -155,7 +175,7 @@ cogl_shader_is_compiled (CoglHandle handle)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* HAVE_COGL_GLES2 */
|
#else /* HAVE_COGL_GLES */
|
||||||
|
|
||||||
/* No support on regular OpenGL 1.1 */
|
/* No support on regular OpenGL 1.1 */
|
||||||
|
|
||||||
@ -211,4 +231,5 @@ cogl_shader_is_compiled (CoglHandle handle)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_COGL_GLES2 */
|
#endif /* HAVE_COGL_GLES */
|
||||||
|
|
@ -23,8 +23,6 @@ libclutter_cogl_driver_la_CPPFLAGS = \
|
|||||||
libclutter_cogl_driver_la_SOURCES = \
|
libclutter_cogl_driver_la_SOURCES = \
|
||||||
cogl.c \
|
cogl.c \
|
||||||
cogl-texture-driver.c \
|
cogl-texture-driver.c \
|
||||||
cogl-shader-private.h \
|
|
||||||
cogl-shader.c \
|
|
||||||
cogl-program.h \
|
cogl-program.h \
|
||||||
cogl-program.c \
|
cogl-program.c \
|
||||||
cogl-context-driver.h \
|
cogl-context-driver.h \
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Cogl
|
|
||||||
*
|
|
||||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008,2009 Intel Corporation.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __COGL_SHADER_H
|
|
||||||
#define __COGL_SHADER_H
|
|
||||||
|
|
||||||
#include "cogl-handle.h"
|
|
||||||
|
|
||||||
typedef struct _CoglShader CoglShader;
|
|
||||||
|
|
||||||
struct _CoglShader
|
|
||||||
{
|
|
||||||
CoglHandleObject _parent;
|
|
||||||
GLhandleARB gl_handle;
|
|
||||||
CoglShaderType type;
|
|
||||||
};
|
|
||||||
|
|
||||||
CoglShader *_cogl_shader_pointer_from_handle (CoglHandle handle);
|
|
||||||
|
|
||||||
#endif /* __COGL_SHADER_H */
|
|
@ -1,169 +0,0 @@
|
|||||||
/*
|
|
||||||
* Cogl
|
|
||||||
*
|
|
||||||
* An object oriented GL/GLES Abstraction/Utility Layer
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007,2008,2009,2010 Intel Corporation.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "cogl.h"
|
|
||||||
#include "cogl-shader-private.h"
|
|
||||||
#include "cogl-internal.h"
|
|
||||||
#include "cogl-context.h"
|
|
||||||
#include "cogl-handle.h"
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
#define glCreateShader ctx->drv.pf_glCreateShader
|
|
||||||
#define glGetShaderiv ctx->drv.pf_glGetShaderiv
|
|
||||||
#define glGetShaderInfoLog ctx->drv.pf_glGetShaderInfoLog
|
|
||||||
#define glCompileShader ctx->drv.pf_glCompileShader
|
|
||||||
#define glShaderSource ctx->drv.pf_glShaderSource
|
|
||||||
#define glDeleteShader ctx->drv.pf_glDeleteShader
|
|
||||||
|
|
||||||
static void _cogl_shader_free (CoglShader *shader);
|
|
||||||
|
|
||||||
COGL_HANDLE_DEFINE (Shader, shader);
|
|
||||||
COGL_OBJECT_DEFINE_DEPRECATED_REF_COUNTING (shader);
|
|
||||||
|
|
||||||
static void
|
|
||||||
_cogl_shader_free (CoglShader *shader)
|
|
||||||
{
|
|
||||||
/* Frees shader resources but its handle is not
|
|
||||||
released! Do that separately before this! */
|
|
||||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
|
||||||
glDeleteShader (shader->gl_handle);
|
|
||||||
|
|
||||||
g_slice_free (CoglShader, shader);
|
|
||||||
}
|
|
||||||
|
|
||||||
CoglHandle
|
|
||||||
cogl_create_shader (CoglShaderType type)
|
|
||||||
{
|
|
||||||
CoglShader *shader;
|
|
||||||
GLenum gl_type;
|
|
||||||
|
|
||||||
_COGL_GET_CONTEXT (ctx, COGL_INVALID_HANDLE);
|
|
||||||
|
|
||||||
if (type == COGL_SHADER_TYPE_VERTEX)
|
|
||||||
gl_type = GL_VERTEX_SHADER;
|
|
||||||
else if (type == COGL_SHADER_TYPE_FRAGMENT)
|
|
||||||
gl_type = GL_FRAGMENT_SHADER;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_warning ("Unexpected shader type (0x%08lX) given to "
|
|
||||||
"cogl_create_shader", (unsigned long) type);
|
|
||||||
return COGL_INVALID_HANDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
shader = g_slice_new (CoglShader);
|
|
||||||
shader->gl_handle = glCreateShader (gl_type);
|
|
||||||
shader->type = type;
|
|
||||||
|
|
||||||
return _cogl_shader_handle_new (shader);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
cogl_shader_source (CoglHandle handle,
|
|
||||||
const char *source)
|
|
||||||
{
|
|
||||||
CoglShader *shader;
|
|
||||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
|
||||||
|
|
||||||
if (!cogl_is_shader (handle))
|
|
||||||
return;
|
|
||||||
|
|
||||||
shader = _cogl_shader_pointer_from_handle (handle);
|
|
||||||
|
|
||||||
glShaderSource (shader->gl_handle, 1, &source, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
cogl_shader_compile (CoglHandle handle)
|
|
||||||
{
|
|
||||||
CoglShader *shader;
|
|
||||||
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
|
|
||||||
|
|
||||||
if (!cogl_is_shader (handle))
|
|
||||||
return;
|
|
||||||
|
|
||||||
shader = _cogl_shader_pointer_from_handle (handle);
|
|
||||||
|
|
||||||
glCompileShader (shader->gl_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
cogl_shader_get_info_log (CoglHandle handle)
|
|
||||||
{
|
|
||||||
CoglShader *shader;
|
|
||||||
char buffer[512];
|
|
||||||
GLsizei len;
|
|
||||||
_COGL_GET_CONTEXT (ctx, NULL);
|
|
||||||
|
|
||||||
if (!cogl_is_shader (handle))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
shader = _cogl_shader_pointer_from_handle (handle);
|
|
||||||
|
|
||||||
glGetShaderInfoLog (shader->gl_handle, 511, &len, buffer);
|
|
||||||
buffer[len]='\0';
|
|
||||||
|
|
||||||
return g_strdup (buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
CoglShaderType
|
|
||||||
cogl_shader_get_type (CoglHandle handle)
|
|
||||||
{
|
|
||||||
CoglShader *shader;
|
|
||||||
|
|
||||||
_COGL_GET_CONTEXT (ctx, COGL_SHADER_TYPE_VERTEX);
|
|
||||||
|
|
||||||
if (!cogl_is_shader (handle))
|
|
||||||
{
|
|
||||||
g_warning ("Non shader handle type passed to cogl_shader_get_type");
|
|
||||||
return COGL_SHADER_TYPE_VERTEX;
|
|
||||||
}
|
|
||||||
|
|
||||||
shader = _cogl_shader_pointer_from_handle (handle);
|
|
||||||
return shader->type;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
cogl_shader_is_compiled (CoglHandle handle)
|
|
||||||
{
|
|
||||||
GLint status;
|
|
||||||
CoglShader *shader;
|
|
||||||
|
|
||||||
_COGL_GET_CONTEXT (ctx, FALSE);
|
|
||||||
|
|
||||||
if (!cogl_is_shader (handle))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
shader = _cogl_shader_pointer_from_handle (handle);
|
|
||||||
|
|
||||||
GE (glGetShaderiv (shader->gl_handle, GL_COMPILE_STATUS, &status));
|
|
||||||
if (status == GL_TRUE)
|
|
||||||
return TRUE;
|
|
||||||
else
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
@ -28,8 +28,6 @@ libclutter_cogl_driver_la_SOURCES = \
|
|||||||
cogl-gles2-wrapper.h \
|
cogl-gles2-wrapper.h \
|
||||||
cogl-program.h \
|
cogl-program.h \
|
||||||
cogl-program.c \
|
cogl-program.c \
|
||||||
cogl-shader-private.h \
|
|
||||||
cogl-shader.c \
|
|
||||||
cogl-feature-functions.h
|
cogl-feature-functions.h
|
||||||
|
|
||||||
if USE_GLES2_WRAPPER
|
if USE_GLES2_WRAPPER
|
||||||
|
Loading…
Reference in New Issue
Block a user