diff --git a/gfx/shader/shader_cg.c b/gfx/shader/shader_cg.c index 85aff91861..143f76031c 100644 --- a/gfx/shader/shader_cg.c +++ b/gfx/shader/shader_cg.c @@ -1012,5 +1012,6 @@ const shader_backend_t gl_cg_backend = { gl_cg_get_current_shader, RARCH_SHADER_CG, + "cg" }; diff --git a/gfx/shader/shader_context.c b/gfx/shader/shader_context.c index 2f47cac140..4f8ff14327 100644 --- a/gfx/shader/shader_context.c +++ b/gfx/shader/shader_context.c @@ -1,5 +1,5 @@ /* RetroArch - A frontend for libretro. - * Copyright (C) 2010-2014 - Hans-Kristian Arntzen + * Copyright (C) 2011-2014 - Daniel De Matteis * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- @@ -15,3 +15,43 @@ #include "shader_context.h" #include "../../retroarch_logger.h" +#include + +#ifdef HAVE_CONFIG_H +#include "../../config.h" +#endif + +static const shader_backend_t *shader_ctx_drivers[] = { +#ifdef HAVE_CG + &gl_cg_backend, +#endif +#ifdef HAVE_GLSL + &gl_glsl_backend, +#endif +#ifdef HAVE_HLSL + &hlsl_backend, +#endif + &shader_null_backend, + NULL +}; + +const shader_backend_t *shader_ctx_find_driver(const char *ident) +{ + unsigned i; + for (i = 0; shader_ctx_drivers[i]; i++) + { + if (strcmp(shader_ctx_drivers[i]->ident, ident) == 0) + return shader_ctx_drivers[i]; + } + + return NULL; +} + +const shader_backend_t *shader_ctx_init_first(void) +{ + unsigned i; + for (i = 0; shader_ctx_drivers[i]; i++) + return shader_ctx_drivers[i]; + + return NULL; +} diff --git a/gfx/shader/shader_context.h b/gfx/shader/shader_context.h index 6aa74c9825..afa1b50f58 100644 --- a/gfx/shader/shader_context.h +++ b/gfx/shader/shader_context.h @@ -51,6 +51,9 @@ typedef struct shader_backend struct gfx_shader *(*get_current_shader)(void); enum rarch_shader_type type; + + /* Human readable string. */ + const char *ident; } shader_backend_t; extern const shader_backend_t gl_glsl_backend; @@ -71,6 +74,7 @@ extern const shader_backend_t shader_null_backend; #endif #if defined(HAVE_CG) || defined(HAVE_HLSL) || defined(HAVE_GLSL) + #ifndef HAVE_SHADER_MANAGER #define HAVE_SHADER_MANAGER #endif @@ -81,4 +85,8 @@ extern const shader_backend_t shader_null_backend; #endif +const shader_backend_t *shader_ctx_find_driver(const char *ident); + +const shader_backend_t *shader_ctx_init_first(void); + #endif diff --git a/gfx/shader/shader_glsl.c b/gfx/shader/shader_glsl.c index 7ec673487f..add317893a 100644 --- a/gfx/shader/shader_glsl.c +++ b/gfx/shader/shader_glsl.c @@ -1261,5 +1261,6 @@ const shader_backend_t gl_glsl_backend = { gl_glsl_get_current_shader, RARCH_SHADER_GLSL, + "glsl" }; diff --git a/gfx/shader/shader_hlsl.c b/gfx/shader/shader_hlsl.c index 6a8d710abb..a887d021a3 100644 --- a/gfx/shader/shader_hlsl.c +++ b/gfx/shader/shader_hlsl.c @@ -453,4 +453,5 @@ const shader_backend_t hlsl_backend = { hlsl_get_current_shader, RARCH_SHADER_HLSL, + "hlsl" }; diff --git a/gfx/shader/shader_null.c b/gfx/shader/shader_null.c index 8291deb695..d1e66109ff 100644 --- a/gfx/shader/shader_null.c +++ b/gfx/shader/shader_null.c @@ -119,4 +119,5 @@ const shader_backend_t shader_null_backend = { shader_null_get_current_shader, RARCH_SHADER_NONE, + "nullshader" };