Shader directory looks for Cg/Cgp shaders.
This commit is contained in:
parent
52cde797c1
commit
102d30473e
2
driver.c
2
driver.c
|
@ -528,7 +528,7 @@ static void init_shader_dir(void)
|
||||||
if (!*g_settings.video.shader_dir)
|
if (!*g_settings.video.shader_dir)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_extern.shader_dir.list = dir_list_new(g_settings.video.shader_dir, "shader", false);
|
g_extern.shader_dir.list = dir_list_new(g_settings.video.shader_dir, "shader|cg|cgp", false);
|
||||||
if (g_extern.shader_dir.list->size == 0)
|
if (g_extern.shader_dir.list->size == 0)
|
||||||
{
|
{
|
||||||
deinit_shader_dir();
|
deinit_shader_dir();
|
||||||
|
|
12
driver.h
12
driver.h
|
@ -105,6 +105,14 @@ struct retro_keybind
|
||||||
uint32_t joyaxis;
|
uint32_t joyaxis;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum rarch_shader_type
|
||||||
|
{
|
||||||
|
RARCH_SHADER_CG,
|
||||||
|
RARCH_SHADER_BSNES,
|
||||||
|
RARCH_SHADER_AUTO,
|
||||||
|
RARCH_SHADER_NONE
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct video_info
|
typedef struct video_info
|
||||||
{
|
{
|
||||||
unsigned width;
|
unsigned width;
|
||||||
|
@ -177,7 +185,7 @@ typedef struct video_driver
|
||||||
// Is the window still active?
|
// Is the window still active?
|
||||||
bool (*alive)(void *data);
|
bool (*alive)(void *data);
|
||||||
bool (*focus)(void *data); // Does the window have focus?
|
bool (*focus)(void *data); // Does the window have focus?
|
||||||
bool (*xml_shader)(void *data, const char *path); // Sets XML-shader. Might not be implemented.
|
bool (*set_shader)(void *data, enum rarch_shader_type type, const char *path); // Sets shader. Might not be implemented.
|
||||||
void (*free)(void *data);
|
void (*free)(void *data);
|
||||||
const char *ident;
|
const char *ident;
|
||||||
|
|
||||||
|
@ -281,7 +289,7 @@ extern const input_driver_t input_null;
|
||||||
#define video_set_nonblock_state_func(state) driver.video->set_nonblock_state(driver.video_data, state)
|
#define video_set_nonblock_state_func(state) driver.video->set_nonblock_state(driver.video_data, state)
|
||||||
#define video_alive_func() driver.video->alive(driver.video_data)
|
#define video_alive_func() driver.video->alive(driver.video_data)
|
||||||
#define video_focus_func() driver.video->focus(driver.video_data)
|
#define video_focus_func() driver.video->focus(driver.video_data)
|
||||||
#define video_xml_shader_func(path) driver.video->xml_shader(driver.video_data, path)
|
#define video_set_shader_func(type, path) driver.video->set_shader(driver.video_data, type, path)
|
||||||
#define video_set_rotation_func(rotate) driver.video->set_rotation(driver.video_data, rotate)
|
#define video_set_rotation_func(rotate) driver.video->set_rotation(driver.video_data, rotate)
|
||||||
#define video_set_aspect_ratio_func(aspect_idx) driver.video->set_aspect_ratio(driver.video_data, aspect_idx)
|
#define video_set_aspect_ratio_func(aspect_idx) driver.video->set_aspect_ratio(driver.video_data, aspect_idx)
|
||||||
#define video_viewport_size_func(width, height) driver.video->viewport_size(driver.video_data, width, height)
|
#define video_viewport_size_func(width, height) driver.video->viewport_size(driver.video_data, width, height)
|
||||||
|
|
|
@ -73,14 +73,6 @@
|
||||||
|
|
||||||
#define MAX_PLAYERS 8
|
#define MAX_PLAYERS 8
|
||||||
|
|
||||||
enum rarch_shader_type
|
|
||||||
{
|
|
||||||
RARCH_SHADER_CG,
|
|
||||||
RARCH_SHADER_BSNES,
|
|
||||||
RARCH_SHADER_AUTO,
|
|
||||||
RARCH_SHADER_NONE
|
|
||||||
};
|
|
||||||
|
|
||||||
// All config related settings go here.
|
// All config related settings go here.
|
||||||
struct settings
|
struct settings
|
||||||
{
|
{
|
||||||
|
|
30
gfx/gl.c
30
gfx/gl.c
|
@ -1447,8 +1447,8 @@ static bool gl_focus(void *data)
|
||||||
return gfx_ctx_window_has_focus();
|
return gfx_ctx_window_has_focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_XML
|
#if defined(HAVE_XML) || defined(HAVE_CG)
|
||||||
static bool gl_xml_shader(void *data, const char *path)
|
static bool gl_set_shader(void *data, enum rarch_shader_type type, const char *path)
|
||||||
{
|
{
|
||||||
gl_t *gl = (gl_t*)data;
|
gl_t *gl = (gl_t*)data;
|
||||||
|
|
||||||
|
@ -1459,8 +1459,26 @@ static bool gl_xml_shader(void *data, const char *path)
|
||||||
|
|
||||||
gl_shader_deinit();
|
gl_shader_deinit();
|
||||||
|
|
||||||
if (!gl_glsl_init(path))
|
switch (type)
|
||||||
return false;
|
{
|
||||||
|
#ifdef HAVE_XML
|
||||||
|
case RARCH_SHADER_BSNES:
|
||||||
|
if (!gl_glsl_init(path))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CG
|
||||||
|
case RARCH_SHADER_CG:
|
||||||
|
if (!gl_cg_init(path))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
RARCH_ERR("Invalid shader type in gl_set_shader().\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_FBO
|
#ifdef HAVE_FBO
|
||||||
// Set up render to texture again.
|
// Set up render to texture again.
|
||||||
|
@ -1607,8 +1625,8 @@ const video_driver_t video_gl = {
|
||||||
gl_alive,
|
gl_alive,
|
||||||
gl_focus,
|
gl_focus,
|
||||||
|
|
||||||
#ifdef HAVE_XML
|
#if defined(HAVE_XML) || defined(HAVE_CG)
|
||||||
gl_xml_shader,
|
gl_set_shader,
|
||||||
#else
|
#else
|
||||||
NULL,
|
NULL,
|
||||||
#endif
|
#endif
|
||||||
|
|
23
retroarch.c
23
retroarch.c
|
@ -2264,7 +2264,7 @@ static void check_shader_dir(void)
|
||||||
static bool old_pressed_next = false;
|
static bool old_pressed_next = false;
|
||||||
static bool old_pressed_prev = false;
|
static bool old_pressed_prev = false;
|
||||||
|
|
||||||
if (!g_extern.shader_dir.list || !driver.video->xml_shader)
|
if (!g_extern.shader_dir.list || !driver.video->set_shader)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bool should_apply = false;
|
bool should_apply = false;
|
||||||
|
@ -2286,18 +2286,29 @@ static void check_shader_dir(void)
|
||||||
|
|
||||||
if (should_apply)
|
if (should_apply)
|
||||||
{
|
{
|
||||||
const char *shader = g_extern.shader_dir.list->elems[g_extern.shader_dir.ptr].data;
|
const char *shader = g_extern.shader_dir.list->elems[g_extern.shader_dir.ptr].data;
|
||||||
|
enum rarch_shader_type type = RARCH_SHADER_NONE;
|
||||||
|
|
||||||
strlcpy(g_settings.video.bsnes_shader_path, shader, sizeof(g_settings.video.bsnes_shader_path));
|
const char *ext = strrchr(shader, '.');
|
||||||
g_settings.video.shader_type = RARCH_SHADER_BSNES;
|
if (ext)
|
||||||
|
{
|
||||||
|
if (strcmp(ext, ".shader") == 0)
|
||||||
|
type = RARCH_SHADER_BSNES;
|
||||||
|
else if (strcmp(ext, ".cg") == 0 || strcmp(ext, ".cgp") == 0)
|
||||||
|
type = RARCH_SHADER_CG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == RARCH_SHADER_NONE)
|
||||||
|
return;
|
||||||
|
|
||||||
msg_queue_clear(g_extern.msg_queue);
|
msg_queue_clear(g_extern.msg_queue);
|
||||||
|
|
||||||
char msg[512];
|
char msg[512];
|
||||||
snprintf(msg, sizeof(msg), "XML shader #%u: \"%s\"", (unsigned)g_extern.shader_dir.ptr, shader);
|
snprintf(msg, sizeof(msg), "Shader #%u: \"%s\"", (unsigned)g_extern.shader_dir.ptr, shader);
|
||||||
msg_queue_push(g_extern.msg_queue, msg, 1, 120);
|
msg_queue_push(g_extern.msg_queue, msg, 1, 120);
|
||||||
RARCH_LOG("Applying shader \"%s\"\n", shader);
|
RARCH_LOG("Applying shader \"%s\"\n", shader);
|
||||||
|
|
||||||
if (!video_xml_shader_func(shader))
|
if (!video_set_shader_func(type, shader))
|
||||||
RARCH_WARN("Failed to apply shader.\n");
|
RARCH_WARN("Failed to apply shader.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -285,7 +285,7 @@
|
||||||
# input_rate_step_up = kp_plus
|
# input_rate_step_up = kp_plus
|
||||||
# input_rate_step_down = kp_minus
|
# input_rate_step_down = kp_minus
|
||||||
|
|
||||||
# Applies next and previous XML shader in directory.
|
# Applies next and previous XML/Cg shader in directory.
|
||||||
# input_shader_next = m
|
# input_shader_next = m
|
||||||
# input_shader_prev = n
|
# input_shader_prev = n
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue