Mercurial > hg > dmlib
changeset 366:38e10b5f4e09
Work towards base engine re-entrancy.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 16 Oct 2012 23:16:42 +0300 |
parents | 5a003246a735 |
children | 9875c65029af |
files | dmengine.c dmengine.h dmsimple.c |
diffstat | 3 files changed, 44 insertions(+), 48 deletions(-) [+] |
line wrap: on
line diff
--- a/dmengine.c Tue Oct 16 22:44:41 2012 +0300 +++ b/dmengine.c Tue Oct 16 23:16:42 2012 +0300 @@ -9,7 +9,6 @@ DMEngineData engine; -DMFrameData frame; static int engineResImageLoad(DMResource *res) @@ -196,10 +195,12 @@ } -void *engineGetResource(const char *name) +void *engineGetResource(DMEngineData *eng, const char *name) { - DMResource *res = dmres_find(engine.resources, name); - if (res != NULL && res->rdata != NULL) + DMResource *res; + if (eng != NULL && + (res = dmres_find(eng->resources, name)) != NULL && + res->rdata != NULL) return res->rdata; else { @@ -210,27 +211,27 @@ #ifdef DM_USE_JSS -void engineGetJSSInfo(BOOL *playing, int *order, JSSPattern **pat, int *npattern, int *row) +void engineGetJSSInfo(DMEngineData *eng, BOOL *playing, int *order, JSSPattern **pat, int *npattern, int *row) { - JSS_LOCK(engine.plr); + JSS_LOCK(eng->plr); - *playing = engine.plr->isPlaying; - *row = engine.plr->row; - *pat = engine.plr->pattern; - *npattern = engine.plr->npattern; - *order = engine.plr->order; + *playing = eng->plr->isPlaying; + *row = eng->plr->row; + *pat = eng->plr->pattern; + *npattern = eng->plr->npattern; + *order = eng->plr->order; - JSS_UNLOCK(engine.plr); + JSS_UNLOCK(eng->plr); } -void engineGetJSSChannelInfo(const int channel, int *ninst, int *nextInst, int *freq, int *note) +void engineGetJSSChannelInfo(DMEngineData *eng, const int channel, int *ninst, int *nextInst, int *freq, int *note) { - JSS_LOCK(engine.plr); - JSSPlayerChannel *chn = &(engine.plr->channels[channel]); + JSS_LOCK(eng->plr); + JSSPlayerChannel *chn = &(eng->plr->channels[channel]); *ninst = chn->ninstrument; *nextInst = chn->nextInstrument; *freq = chn->freq; *note = chn->note; - JSS_UNLOCK(engine.plr); + JSS_UNLOCK(eng->plr); } #endif
--- a/dmengine.h Tue Oct 16 22:44:41 2012 +0300 +++ b/dmengine.h Tue Oct 16 23:16:42 2012 +0300 @@ -20,10 +20,7 @@ #endif -typedef struct -{ - int time, number; -} DMFrameData; +struct DMEngineData; typedef struct @@ -57,40 +54,36 @@ size_t audioPos; #endif - int (*demoInit)(); - int (*demoInitPreVideo)(); - int (*demoInitPostVideo)(); - int (*demoRender)(); - void (*demoShutdown)(); - void (*demoQuit)(); + int (*demoInit)(struct DMEngineData *); + int (*demoInitPreVideo)(struct DMEngineData *); + int (*demoInitPostVideo)(struct DMEngineData *); + int (*demoRender)(struct DMEngineData *); + void (*demoShutdown)(struct DMEngineData *); + void (*demoQuit)(struct DMEngineData *); } DMEngineData; -extern DMEngineData engine; - - -#define engineGetResImage(x, name) \ +#define engineGetResImage(eng, x, name) \ do { \ - if ((x = (SDL_Surface *) engineGetResource(name)) == NULL) \ + if ((x = (SDL_Surface *) engineGetResource(eng, name)) == NULL) \ return DMERR_INIT_FAIL; \ } while (0) -#define engineGetResModule(x, name) \ +#define engineGetResModule(eng, x, name) \ do { \ - if ((x = (JSSModule *) engineGetResource(name)) == NULL) \ + if ((x = (JSSModule *) engineGetResource(eng, name)) == NULL) \ return DMERR_INIT_FAIL; \ } while (0) int engineClassifier(DMResource *res); -void * engineGetResource(const char *name); -int engineGetTime(int t); -int engineGetTimeDTi(); -int engineGetTick(); -float engineGetTimeDT(); - -int demoPreInit(); +void * engineGetResource(DMEngineData *eng, const char *name); +int engineGetTime(DMEngineData *eng, int t); +int engineGetTimeDTi(DMEngineData *eng); +int engineGetTick(DMEngineData *eng); +float engineGetTimeDT(DMEngineData *eng); +int demoPreInit(DMEngineData *eng); #ifdef __cplusplus
--- a/dmsimple.c Tue Oct 16 22:44:41 2012 +0300 +++ b/dmsimple.c Tue Oct 16 23:16:42 2012 +0300 @@ -2,6 +2,8 @@ #include "dmengine.h" #include "dmargs.h" +static DMEngineData engine; + static DMOptArg optList[] = { { 0, '?', "help", "Show this help", OPT_NONE }, @@ -185,7 +187,7 @@ memset(&engine, 0, sizeof(engine)); // Pre-initialization - if ((err = demoPreInit()) != DMERR_OK) + if ((err = demoPreInit(&engine)) != DMERR_OK) goto error_exit; if (!dmArgsProcess(argc, argv, optList, optListN, @@ -278,7 +280,7 @@ // Initialize SDL video if (engine.demoInitPreVideo != NULL && - (err = engine.demoInitPreVideo()) != DMERR_OK) + (err = engine.demoInitPreVideo(&engine)) != DMERR_OK) { dmError("demoInitPreVideo() failed, %d: %s\n", err, dmErrorStr(err)); goto error_exit; @@ -291,7 +293,7 @@ SDL_WM_SetCaption(dmProgDesc, dmProgName); if (engine.demoInitPostVideo != NULL && - (err = engine.demoInitPostVideo()) != DMERR_OK) + (err = engine.demoInitPostVideo(&engine)) != DMERR_OK) { dmError("demoInitPostVideo() failed, %d: %s\n", err, dmErrorStr(err)); goto error_exit; @@ -307,7 +309,7 @@ } // Final initializations - if ((err = engine.demoInit()) != DMERR_OK) + if ((err = engine.demoInit(&engine)) != DMERR_OK) { dmError("Failure in demoInit(), %d: %s\n", err, dmErrorStr(err)); @@ -415,12 +417,12 @@ // Call main tick if (engine.demoRender != NULL) { - if ((err = engine.demoRender()) != DMERR_OK) + if ((err = engine.demoRender(&engine)) != DMERR_OK) goto error_exit; } else { - if ((err = dmExecuteTimeline(engine.ptl, engine.screen, engineGetTick())) != DMERR_OK) + if ((err = dmExecuteTimeline(engine.ptl, engine.screen, engineGetTick(&engine))) != DMERR_OK) goto error_exit; } @@ -464,13 +466,13 @@ dmres_close(engine.resources); if (engine.demoShutdown != NULL) - engine.demoShutdown(); + engine.demoShutdown(&engine); if (initSDL) SDL_Quit(); if (engine.demoQuit != NULL) - engine.demoQuit(); + engine.demoQuit(&engine); return 0; }