Python works :P
This commit is contained in:
parent
9bfeb88e24
commit
4d96fbba6a
|
@ -116,6 +116,8 @@ static char gl_teximage_uniforms[MAX_TEXTURES][64];
|
||||||
static snes_tracker_t *gl_snes_tracker = NULL;
|
static snes_tracker_t *gl_snes_tracker = NULL;
|
||||||
static struct snes_tracker_uniform_info gl_tracker_info[MAX_VARIABLES];
|
static struct snes_tracker_uniform_info gl_tracker_info[MAX_VARIABLES];
|
||||||
static unsigned gl_tracker_info_cnt = 0;
|
static unsigned gl_tracker_info_cnt = 0;
|
||||||
|
static char gl_tracker_script[256];
|
||||||
|
static char gl_tracker_script_class[64];
|
||||||
|
|
||||||
struct shader_program
|
struct shader_program
|
||||||
{
|
{
|
||||||
|
@ -378,7 +380,7 @@ error:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool get_import_value(xmlNodePtr ptr)
|
static bool get_import_value(const char *path, xmlNodePtr ptr)
|
||||||
{
|
{
|
||||||
if (gl_tracker_info_cnt >= MAX_VARIABLES)
|
if (gl_tracker_info_cnt >= MAX_VARIABLES)
|
||||||
{
|
{
|
||||||
|
@ -386,6 +388,36 @@ static bool get_import_value(xmlNodePtr ptr)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
xmlChar *script = xmlGetProp(ptr, (const xmlChar*)"script");
|
||||||
|
if (script && *gl_tracker_script)
|
||||||
|
{
|
||||||
|
SSNES_ERR("Cannot define more than one script!\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (script)
|
||||||
|
{
|
||||||
|
strlcpy(gl_tracker_script, path, sizeof(gl_tracker_script));
|
||||||
|
char *dir_ptr = strrchr(gl_tracker_script, '/');
|
||||||
|
if (!dir_ptr) dir_ptr = strrchr(gl_tracker_script, '\\');
|
||||||
|
if (dir_ptr) dir_ptr[1] = '\0';
|
||||||
|
strlcat(gl_tracker_script, (const char*)script, sizeof(gl_tracker_script));
|
||||||
|
|
||||||
|
xmlFree(script);
|
||||||
|
|
||||||
|
xmlChar *script_class = xmlGetProp(ptr, (const xmlChar*)"class");
|
||||||
|
if (script_class)
|
||||||
|
{
|
||||||
|
strlcpy(gl_tracker_script_class, (const char*)script_class, sizeof(gl_tracker_script_class));
|
||||||
|
xmlFree(script_class);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
(void)path;
|
||||||
|
#endif
|
||||||
|
|
||||||
xmlChar *id = xmlGetProp(ptr, (const xmlChar*)"id");
|
xmlChar *id = xmlGetProp(ptr, (const xmlChar*)"id");
|
||||||
xmlChar *semantic = xmlGetProp(ptr, (const xmlChar*)"semantic");
|
xmlChar *semantic = xmlGetProp(ptr, (const xmlChar*)"semantic");
|
||||||
xmlChar *wram = xmlGetProp(ptr, (const xmlChar*)"wram");
|
xmlChar *wram = xmlGetProp(ptr, (const xmlChar*)"wram");
|
||||||
|
@ -400,22 +432,48 @@ static bool get_import_value(xmlNodePtr ptr)
|
||||||
SSNES_ERR("No semantic or ID for import value!\n");
|
SSNES_ERR("No semantic or ID for import value!\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum snes_ram_type ram_type;
|
|
||||||
enum snes_tracker_type tracker_type;
|
|
||||||
uint32_t addr = 0;
|
|
||||||
|
|
||||||
if (wram) { addr = strtoul((const char*)wram, NULL, 16); ram_type = SSNES_STATE_WRAM; }
|
enum snes_tracker_type tracker_type;
|
||||||
else if (apuram) { addr = strtoul((const char*)apuram, NULL, 16); ram_type = SSNES_STATE_APURAM; }
|
|
||||||
else if (vram) { addr = strtoul((const char*)vram, NULL, 16); ram_type = SSNES_STATE_VRAM; }
|
if (strcmp((const char*)semantic, "capture") == 0)
|
||||||
else if (oam) { addr = strtoul((const char*)oam, NULL, 16); ram_type = SSNES_STATE_OAM; }
|
tracker_type = SSNES_STATE_CAPTURE;
|
||||||
else if (cgram) { addr = strtoul((const char*)cgram, NULL, 16); ram_type = SSNES_STATE_CGRAM; }
|
else if (strcmp((const char*)semantic, "capture_previous") == 0)
|
||||||
|
tracker_type = SSNES_STATE_CAPTURE_PREV;
|
||||||
|
else if (strcmp((const char*)semantic, "transition") == 0)
|
||||||
|
tracker_type = SSNES_STATE_TRANSITION;
|
||||||
|
else if (strcmp((const char*)semantic, "transition_previous") == 0)
|
||||||
|
tracker_type = SSNES_STATE_TRANSITION_PREV;
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
else if (strcmp((const char*)semantic, "python") == 0)
|
||||||
|
tracker_type = SSNES_STATE_PYTHON;
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SSNES_ERR("No RAM address specificed for import value.\n");
|
SSNES_ERR("Invalid semantic for import value.\n");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum snes_ram_type ram_type = SSNES_STATE_WRAM;
|
||||||
|
uint32_t addr = 0;
|
||||||
|
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
if (tracker_type != SSNES_STATE_PYTHON)
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
if (wram) { addr = strtoul((const char*)wram, NULL, 16); ram_type = SSNES_STATE_WRAM; }
|
||||||
|
else if (apuram) { addr = strtoul((const char*)apuram, NULL, 16); ram_type = SSNES_STATE_APURAM; }
|
||||||
|
else if (vram) { addr = strtoul((const char*)vram, NULL, 16); ram_type = SSNES_STATE_VRAM; }
|
||||||
|
else if (oam) { addr = strtoul((const char*)oam, NULL, 16); ram_type = SSNES_STATE_OAM; }
|
||||||
|
else if (cgram) { addr = strtoul((const char*)cgram, NULL, 16); ram_type = SSNES_STATE_CGRAM; }
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SSNES_ERR("No RAM address specificed for import value.\n");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int memtype = 0;
|
int memtype = 0;
|
||||||
switch (ram_type)
|
switch (ram_type)
|
||||||
{
|
{
|
||||||
|
@ -434,6 +492,7 @@ static bool get_import_value(xmlNodePtr ptr)
|
||||||
case SSNES_STATE_CGRAM:
|
case SSNES_STATE_CGRAM:
|
||||||
memtype = SNES_MEMORY_CGRAM;
|
memtype = SNES_MEMORY_CGRAM;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -444,20 +503,6 @@ static bool get_import_value(xmlNodePtr ptr)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp((const char*)semantic, "capture") == 0)
|
|
||||||
tracker_type = SSNES_STATE_CAPTURE;
|
|
||||||
else if (strcmp((const char*)semantic, "capture_previous") == 0)
|
|
||||||
tracker_type = SSNES_STATE_CAPTURE_PREV;
|
|
||||||
else if (strcmp((const char*)semantic, "transition") == 0)
|
|
||||||
tracker_type = SSNES_STATE_TRANSITION;
|
|
||||||
else if (strcmp((const char*)semantic, "transition_previous") == 0)
|
|
||||||
tracker_type = SSNES_STATE_TRANSITION_PREV;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SSNES_ERR("Invalid semantic for import value.\n");
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned mask_value = 0;
|
unsigned mask_value = 0;
|
||||||
if (bitmask)
|
if (bitmask)
|
||||||
mask_value = strtoul((const char*)bitmask, NULL, 16);
|
mask_value = strtoul((const char*)bitmask, NULL, 16);
|
||||||
|
@ -582,7 +627,7 @@ static unsigned get_xml_shaders(const char *path, struct shader_program *prog, s
|
||||||
}
|
}
|
||||||
else if (strcmp((const char*)cur->name, "import") == 0)
|
else if (strcmp((const char*)cur->name, "import") == 0)
|
||||||
{
|
{
|
||||||
if (!get_import_value(cur))
|
if (!get_import_value(path, cur))
|
||||||
{
|
{
|
||||||
SSNES_ERR("Import value is invalid.\n");
|
SSNES_ERR("Import value is invalid.\n");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -812,7 +857,11 @@ bool gl_glsl_init(const char *path)
|
||||||
.apuram = psnes_get_memory_data(SNES_MEMORY_APURAM),
|
.apuram = psnes_get_memory_data(SNES_MEMORY_APURAM),
|
||||||
.oam = psnes_get_memory_data(SNES_MEMORY_OAM),
|
.oam = psnes_get_memory_data(SNES_MEMORY_OAM),
|
||||||
.info = gl_tracker_info,
|
.info = gl_tracker_info,
|
||||||
.info_elem = gl_tracker_info_cnt
|
.info_elem = gl_tracker_info_cnt,
|
||||||
|
#ifdef HAVE_PYTHON
|
||||||
|
.script = *gl_tracker_script ? gl_tracker_script : NULL,
|
||||||
|
.script_class = *gl_tracker_script_class ? gl_tracker_script_class : NULL
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
gl_snes_tracker = snes_tracker_init(&info);
|
gl_snes_tracker = snes_tracker_init(&info);
|
||||||
if (!gl_snes_tracker)
|
if (!gl_snes_tracker)
|
||||||
|
@ -858,6 +907,8 @@ void gl_glsl_deinit(void)
|
||||||
|
|
||||||
gl_tracker_info_cnt = 0;
|
gl_tracker_info_cnt = 0;
|
||||||
memset(gl_tracker_info, 0, sizeof(gl_tracker_info));
|
memset(gl_tracker_info, 0, sizeof(gl_tracker_info));
|
||||||
|
memset(gl_tracker_script, 0, sizeof(gl_tracker_script));
|
||||||
|
memset(gl_tracker_script_class, 0, sizeof(gl_tracker_script_class));
|
||||||
if (gl_snes_tracker)
|
if (gl_snes_tracker)
|
||||||
{
|
{
|
||||||
snes_tracker_free(gl_snes_tracker);
|
snes_tracker_free(gl_snes_tracker);
|
||||||
|
|
|
@ -64,7 +64,7 @@ snes_tracker_t* snes_tracker_init(const struct snes_tracker_info *info)
|
||||||
#ifdef HAVE_PYTHON
|
#ifdef HAVE_PYTHON
|
||||||
if (info->script)
|
if (info->script)
|
||||||
{
|
{
|
||||||
tracker->py = py_state_new(info->script, "GameAware");
|
tracker->py = py_state_new(info->script, info->script_class ? info->script_class : "GameAware");
|
||||||
if (!tracker->py)
|
if (!tracker->py)
|
||||||
{
|
{
|
||||||
free(tracker);
|
free(tracker);
|
||||||
|
|
|
@ -66,6 +66,7 @@ struct snes_tracker_info
|
||||||
|
|
||||||
#ifdef HAVE_PYTHON
|
#ifdef HAVE_PYTHON
|
||||||
const char *script;
|
const char *script;
|
||||||
|
const char *script_class;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -27,4 +27,4 @@ add_command_line_enable PULSE "Enable PulseAudio support" auto
|
||||||
add_command_line_enable FREETYPE "Enable FreeType support" auto
|
add_command_line_enable FREETYPE "Enable FreeType support" auto
|
||||||
add_command_line_enable XVIDEO "Enable XVideo support" auto
|
add_command_line_enable XVIDEO "Enable XVideo support" auto
|
||||||
add_command_line_enable IMLIB "Enable imlib2 support" auto
|
add_command_line_enable IMLIB "Enable imlib2 support" auto
|
||||||
add_command_line_enable PYTHON "Enable Python 3 support for shaders" auto
|
add_command_line_enable PYTHON "Enable Python 3 support for shaders" no
|
||||||
|
|
Loading…
Reference in New Issue