diff options
author | 2015-02-26 01:40:18 +0100 | |
---|---|---|
committer | 2015-02-26 01:40:18 +0100 | |
commit | eb8144a3bb8f5d443b5062b13e3e18b6b8e8c43c (patch) | |
tree | 0dbb6487e5cc7db623f2d9acd9d2db3efa792aca /src/osd/modules/opengl/gl_shader_tool.h | |
parent | 2c2994aeb52b700c206ca6c94513a92601097bdb (diff) |
Moved opengl related stuff to modules/opengl
Diffstat (limited to 'src/osd/modules/opengl/gl_shader_tool.h')
-rw-r--r-- | src/osd/modules/opengl/gl_shader_tool.h | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/src/osd/modules/opengl/gl_shader_tool.h b/src/osd/modules/opengl/gl_shader_tool.h new file mode 100644 index 00000000000..9e53148d7ae --- /dev/null +++ b/src/osd/modules/opengl/gl_shader_tool.h @@ -0,0 +1,198 @@ +/*** + * + * GL Shader Tool - Convinient Basic Shader functionality + * + * Copyright (c) 2007, Sven Gothel + * Copyright (c) 2007, MAME Team + * + * Dual license: MAME and GPL version 2 + * + * This module has a dual license, i.e. it is compatible to MAME, + * but I like to reserve my rights to use this module under + * the GPL as well. + * + * GPL license: + * Visit http://www.gnu.org/copyleft/gpl.html + * + * MAME license: + * Visit http://mamedev.org for licensing and usage restrictions. + * + * + * OpenGL GLSL ARB extentions: + * + * GL_ARB_shader_objects + * GL_ARB_shading_language_100 + * GL_ARB_vertex_shader + * GL_ARB_fragment_shader + * + */ + + +#ifndef _GL_SHADER_TOOL_ +#define _GL_SHADER_TOOL_ + +#ifdef __cplusplus +extern "C" { +#endif + +/*** + * + * OpenGL GLSL extentions: + GL_ARB_shader_objects + GL_ARB_shading_language_100 + GL_ARB_vertex_shader + GL_ARB_fragment_shader + * + */ + +#include <stdint.h> + +#ifndef GL_GLEXT_PROTOTYPES +#define GL_GLEXT_PROTOTYPES 1 +#endif + +#include "osd_opengl.h" + +#if defined(SDLMAME_MACOSX) + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#endif + +typedef void * (APIENTRYP PFNGLGETPROCADDRESSOS)(const char *procName); + +/** + * YOU HAVE TO CALL THIS FUNCTION ONCE ! + * @return 0 - ok .. all shader ARB functions loaded + * otherwise !=0 + */ +int gl_shader_loadExtention(osd_gl_context *gl_ctx); + +enum GLSLCheckMode { + CHECK_QUIET, /* just return 0, if no error, otherwise the GL error code, no stderr output */ + CHECK_VERBOSE, /* same as CHECK_QUIET, but in the case of an error, use stderr to be verbose */ + CHECK_ALWAYS_VERBOSE /* always print out all information available */ +}; + +#define GL_CHECK_ERROR_VERBOSE() gl_check_error(CHECK_ALWAYS_VERBOSE,__FILE__,__LINE__) +#define GL_CHECK_ERROR_NORMAL() gl_check_error(CHECK_VERBOSE,__FILE__,__LINE__) +#define GL_CHECK_ERROR_QUIET() gl_check_error(CHECK_QUIET,__FILE__,__LINE__) +#define GL_CHECK_ERROR(m) gl_check_error(m,__FILE__,__LINE__) + +#define GL_SHADER_CHECK_ERROR_VERBOSE(o,q) gl_shader_check_error(o,q,CHECK_ALWAYS_VERBOSE,__FILE__,__LINE__) +#define GL_SHADER_CHECK_ERROR_NORMAL(o,q) gl_shader_check_error(o,q,CHECK_VERBOSE,__FILE__,__LINE__) +#define GL_SHADER_CHECK_ERROR_QUIET(o,q) gl_shader_check_error(o,q,CHECK_QUIET,__FILE__,__LINE__) +#define GL_SHADER_CHECK_ERROR(o,q,m) gl_shader_check_error(o,q,m,__FILE__,__LINE__) + +#ifdef GL_SHADER_TOOL_DEBUG + #define GL_SHADER_CHECK(o,q) GL_SHADER_CHECK_ERROR_VERBOSE(o,q) + #define GL_CHECK() GL_CHECK_ERROR_VERBOSE() +#else + #define GL_SHADER_CHECK(o,q) GL_SHADER_CHECK_ERROR_NORMAL(o,q) + #define GL_CHECK() GL_CHECK_ERROR_NORMAL() +#endif + +int gl_check_error(GLSLCheckMode m, const char *file, const int line); + +int gl_texture_check_size(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, + GLint border, GLenum format, GLenum type, + GLsizei *avail_width, GLsizei *avail_height, + int verbose); + +int gl_round_to_pow2(int v); + +/** + * @param obj_query Can be either GL_OBJECT_TYPE_ARB, GL_OBJECT_DELETE_STATUS_ARB, GL_OBJECT_COMPILE_STATUS_ARB, + * GL_OBJECT_LINK_STATUS_ARB, GL_OBJECT_VALIDATE_STATUS_ARB + * Should be used after the refering action, i.e. GL_OBJECT_DELETE_STATUS_ARB after a + * glDeleteObjectARB call, etc. + */ +int gl_shader_check_error(GLhandleARB obj, GLenum obj_query, GLSLCheckMode m, const char *file, const int line); + +int gl_compile_shader_file ( GLhandleARB *shader, GLenum type, const char * shader_file, int verbose ); +int gl_compile_shader_source( GLhandleARB *shader, GLenum type, const char * shader_source, int verbose ); + +/** + * you can pass either a valid shader_file, or a precompiled vertex_shader, + * this is true for both, vertex and fragment shaders. + */ +int gl_compile_shader_files( GLhandleARB *program, GLhandleARB *vertex_shader, GLhandleARB *fragment_shader, + const char * vertex_shader_file, + const char * fragment_shader_file, + int verbose + ); + +/** + * you can pass either a valid shader_file, or a precompiled vertex_shader, + * this is true for both, vertex and fragment shaders. + */ +int gl_compile_shader_sources( GLhandleARB *program, GLhandleARB *vertex_shader, GLhandleARB *fragment_shader, + const GLcharARB * vertex_shader_source, + const GLcharARB * fragment_shader_source + ); + +int gl_delete_shader( GLhandleARB *program, GLhandleARB *vertex_shader, GLhandleARB *fragment_shader ); + +#if defined(SDLMAME_MACOSX) +#ifndef GL_ARB_shader_objects + typedef char GLcharARB; + typedef unsigned int GLhandleARB; +#endif +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +#endif + +extern PFNGLGETOBJECTPARAMETERIVARBPROC pfn_glGetObjectParameterivARB; +extern PFNGLGETINFOLOGARBPROC pfn_glGetInfoLogARB; +extern PFNGLDELETEOBJECTARBPROC pfn_glDeleteObjectARB; +extern PFNGLCREATESHADEROBJECTARBPROC pfn_glCreateShaderObjectARB; +extern PFNGLSHADERSOURCEARBPROC pfn_glShaderSourceARB; +extern PFNGLCOMPILESHADERARBPROC pfn_glCompileShaderARB; +extern PFNGLCREATEPROGRAMOBJECTARBPROC pfn_glCreateProgramObjectARB; +extern PFNGLATTACHOBJECTARBPROC pfn_glAttachObjectARB; +extern PFNGLLINKPROGRAMARBPROC pfn_glLinkProgramARB; +extern PFNGLVALIDATEPROGRAMARBPROC pfn_glValidateProgramARB; +extern PFNGLUSEPROGRAMOBJECTARBPROC pfn_glUseProgramObjectARB; +extern PFNGLGETUNIFORMLOCATIONARBPROC pfn_glGetUniformLocationARB; +extern PFNGLUNIFORM1FARBPROC pfn_glUniform1fARB; +extern PFNGLUNIFORM1IARBPROC pfn_glUniform1iARB; +extern PFNGLUNIFORM1FVARBPROC pfn_glUniform1fvARB; +extern PFNGLUNIFORM2FVARBPROC pfn_glUniform2fvARB; +extern PFNGLUNIFORM3FVARBPROC pfn_glUniform3fvARB; +extern PFNGLUNIFORM4FVARBPROC pfn_glUniform4fvARB; +extern PFNGLUNIFORM1IVARBPROC pfn_glUniform1ivARB; +extern PFNGLUNIFORM2IVARBPROC pfn_glUniform2ivARB; +extern PFNGLUNIFORM3IVARBPROC pfn_glUniform3ivARB; +extern PFNGLUNIFORM4IVARBPROC pfn_glUniform4ivARB; + + +#ifdef __cplusplus +} +#endif + +#endif |