- added graphic engine choice in simu config page

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@6142 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 6efae976e2b7e286a1bdadff815e71ddd20921b2
Former-commit-id: 9b39074af19d68d74985bc468f9160ca12d8b517
This commit is contained in:
torcs-ng 2015-09-24 15:16:10 +00:00
parent 51fc9560f4
commit 780da3fde9
2 changed files with 83 additions and 12 deletions

View file

@ -425,6 +425,7 @@ typedef struct RmInfo
#define RM_VAL_MOD_SIMU_REPLAY "simureplay"
#define RM_VAL_MOD_TRACK "track"
#define RM_VAL_MOD_SSGRAPH "ssggraph"
#define RM_VAL_MOD_OSGGRAPH "osggraph"
/* Replay Settings */

View file

@ -34,6 +34,10 @@
#include "gui.h"
/*#ifndef OFFICIAL_ONLY
#define OFFICIAL_ONLY 1
#endif*/
/* list of available simulation engine */
static const int DefaultSimuVersion = 1;
@ -70,6 +74,13 @@ static const char *CooldownSchemeList[] = {RM_VAL_ON, RM_VAL_OFF};
static const int NbCooldownSchemes = sizeof(CooldownSchemeList) / sizeof(CooldownSchemeList[0]);
static int CurCooldownScheme = 0; // On
/* list of available graphic engine */
static const int DefaultGraphicVersion = 1;
static const char *GraphicSchemeList[] = {RM_VAL_MOD_SSGRAPH, RM_VAL_MOD_OSGGRAPH};
static const char *GraphicDispNameList[] = {"ssggraph", "OsgGraph"};
static const int NbGraphicScheme = sizeof(GraphicSchemeList) / sizeof(GraphicSchemeList[0]);
static int CurGraphicScheme = DefaultGraphicVersion;
/* gui label ids */
static int SimuVersionId;
static int MultiThreadSchemeId;
@ -80,6 +91,8 @@ static int StartPausedSchemeId;
static int CooldownSchemeId;
static int GraphicSchemeId;
/* gui screen handles */
static void *ScrHandle = NULL;
static void *PrevScrHandle = NULL;
@ -93,6 +106,7 @@ static void loadSimuCfg(void)
const char *replayRateSchemeName;
const char *startPausedSchemeName;
const char *cooldownSchemeName;
const char *graphicSchemeName;
int i;
@ -103,8 +117,10 @@ static void loadSimuCfg(void)
// Simulation engine name.
simuVersionName = GfParmGetStr(paramHandle, RM_SECT_MODULES, RM_ATTR_MOD_SIMU, SimuVersionList[DefaultSimuVersion]);
for (i = 0; i < NbSimuVersions; i++) {
if (strcmp(simuVersionName, SimuVersionList[i]) == 0) {
for (i = 0; i < NbSimuVersions; i++)
{
if (strcmp(simuVersionName, SimuVersionList[i]) == 0)
{
CurSimuVersion = i;
break;
}
@ -121,8 +137,10 @@ static void loadSimuCfg(void)
// Multi-threading.
multiThreadSchemeName = GfParmGetStr(paramHandle, RM_SECT_RACE_ENGINE, RM_ATTR_MULTI_THREADING, MultiThreadSchemeList[0]);
for (i = 0; i < NbMultiThreadSchemes; i++) {
if (strcmp(multiThreadSchemeName, MultiThreadSchemeList[i]) == 0) {
for (i = 0; i < NbMultiThreadSchemes; i++)
{
if (strcmp(multiThreadSchemeName, MultiThreadSchemeList[i]) == 0)
{
CurMultiThreadScheme = i;
break;
}
@ -130,8 +148,10 @@ static void loadSimuCfg(void)
// Thread affinity.
threadAffinitySchemeName = GfParmGetStr(paramHandle, RM_SECT_RACE_ENGINE, RM_ATTR_THREAD_AFFINITY, ThreadAffinitySchemeList[0]);
for (i = 0; i < NbThreadAffinitySchemes; i++) {
if (strcmp(threadAffinitySchemeName, ThreadAffinitySchemeList[i]) == 0) {
for (i = 0; i < NbThreadAffinitySchemes; i++)
{
if (strcmp(threadAffinitySchemeName, ThreadAffinitySchemeList[i]) == 0)
{
CurThreadAffinityScheme = i;
break;
}
@ -140,8 +160,10 @@ static void loadSimuCfg(void)
// Replay Rate
#ifdef THIRD_PARTY_SQLITE3
replayRateSchemeName = GfParmGetStr(paramHandle, RM_SECT_RACE_ENGINE, RM_ATTR_REPLAY_RATE, ReplaySchemeList[0]);
for (i = 0; i < NbReplaySchemes; i++) {
if (strcmp(replayRateSchemeName, ReplaySchemeList[i]) == 0) {
for (i = 0; i < NbReplaySchemes; i++)
{
if (strcmp(replayRateSchemeName, ReplaySchemeList[i]) == 0)
{
CurReplayScheme = i;
break;
}
@ -152,8 +174,10 @@ static void loadSimuCfg(void)
// startpaused
startPausedSchemeName = GfParmGetStr(paramHandle,RM_SECT_RACE_ENGINE, RM_ATTR_STARTPAUSED, StartPausedSchemeList[1]);
for (i = 0; i < NbStartPausedSchemes; i++) {
if (strcmp(startPausedSchemeName, StartPausedSchemeList[i]) == 0) {
for (i = 0; i < NbStartPausedSchemes; i++)
{
if (strcmp(startPausedSchemeName, StartPausedSchemeList[i]) == 0)
{
CurStartPausedScheme = i;
break;
}
@ -161,24 +185,43 @@ static void loadSimuCfg(void)
// cooldown
cooldownSchemeName = GfParmGetStr(paramHandle,RM_SECT_RACE_ENGINE, RM_ATTR_COOLDOWN, CooldownSchemeList[1]);
for (i = 0; i < NbCooldownSchemes; i++) {
if (strcmp(cooldownSchemeName, CooldownSchemeList[i]) == 0) {
for (i = 0; i < NbCooldownSchemes; i++)
{
if (strcmp(cooldownSchemeName, CooldownSchemeList[i]) == 0)
{
CurCooldownScheme = i;
break;
}
}
// graphic engine
graphicSchemeName = GfParmGetStr(paramHandle, RM_SECT_MODULES, RM_ATTR_MOD_GRAPHIC, GraphicSchemeList[1]);
for (i = 0; i < NbGraphicScheme; i++)
{
if (strcmp(graphicSchemeName, GraphicSchemeList[i]) == 0)
{
CurGraphicScheme = i;
break;
}
}
GfParmReleaseHandle(paramHandle);
GfuiLabelSetText(ScrHandle, SimuVersionId, SimuVersionDispNameList[CurSimuVersion]);
GfuiLabelSetText(ScrHandle, MultiThreadSchemeId, MultiThreadSchemeList[CurMultiThreadScheme]);
GfuiLabelSetText(ScrHandle, ThreadAffinitySchemeId, ThreadAffinitySchemeList[CurThreadAffinityScheme]);
GfuiLabelSetText(ScrHandle, ReplayRateSchemeId, ReplaySchemeDispNameList[CurReplayScheme]);
#ifndef THIRD_PARTY_SQLITE3
GfuiEnable(ScrHandle, ReplayRateSchemeId, GFUI_DISABLE);
#endif
GfuiLabelSetText(ScrHandle, StartPausedSchemeId, StartPausedSchemeList[CurStartPausedScheme]);
GfuiLabelSetText(ScrHandle, CooldownSchemeId, CooldownSchemeList[CurCooldownScheme]);
GfuiLabelSetText(ScrHandle, GraphicSchemeId, GraphicSchemeList[CurGraphicScheme]);
#ifdef OFFICIAL_ONLY
GfuiEnable(ScrHandle, GraphicSchemeId, GFUI_DISABLE);
#endif
}
@ -195,6 +238,7 @@ static void storeSimuCfg(void * /* dummy */)
GfParmSetStr(paramHandle, RM_SECT_RACE_ENGINE, RM_ATTR_REPLAY_RATE, ReplaySchemeList[CurReplayScheme]);
GfParmSetStr(paramHandle, RM_SECT_RACE_ENGINE, RM_ATTR_STARTPAUSED, StartPausedSchemeList[CurStartPausedScheme]);
GfParmSetStr(paramHandle, RM_SECT_RACE_ENGINE, RM_ATTR_COOLDOWN, CooldownSchemeList[CurCooldownScheme]);
GfParmSetStr(paramHandle, RM_SECT_MODULES, RM_ATTR_MOD_GRAPHIC, GraphicSchemeList[CurGraphicScheme]);
GfParmWriteFile(NULL, paramHandle, "raceengine");
GfParmReleaseHandle(paramHandle);
@ -224,6 +268,26 @@ onChangeSimuVersion(void *vp)
GfuiLabelSetText(ScrHandle, SimuVersionId, SimuVersionDispNameList[CurSimuVersion]);
}
/* Change the graphc engine version (but only show really available modules) */
static void
onChangeGraphicVersion(void *vp)
{
char buf[1024];
if (!vp)
return;
const int oldGraphicVersion = CurGraphicScheme;
do
{
CurGraphicScheme = (CurGraphicScheme + NbGraphicScheme + (int)(long)vp) % NbGraphicScheme;
snprintf(buf, sizeof(buf), "%smodules/graphic/%s.%s", GfLibDir(), GraphicSchemeList[CurGraphicScheme], DLLEXT);
}
while (!GfFileExists(buf) && CurGraphicScheme != oldGraphicVersion);
GfuiLabelSetText(ScrHandle, GraphicSchemeId, GraphicDispNameList[CurGraphicScheme]);
}
/* Change the multi-threading scheme */
static void
@ -329,6 +393,12 @@ SimuMenuInit(void *prevMenu)
GfuiMenuCreateButtonControl(ScrHandle, menuDescHdle, "cooldownleftarrow", (void*)-1, onChangeCooldownScheme);
GfuiMenuCreateButtonControl(ScrHandle, menuDescHdle, "cooldownrightarrow", (void*)1, onChangeCooldownScheme);
GraphicSchemeId = GfuiMenuCreateLabelControl(ScrHandle, menuDescHdle, "graphiclabel");
#ifndef OFFICIAL_ONLY
GfuiMenuCreateButtonControl(ScrHandle, menuDescHdle, "graphicleftarrow", (void*)-1, onChangeGraphicVersion);
GfuiMenuCreateButtonControl(ScrHandle, menuDescHdle, "graphicrightarrow", (void*)1, onChangeGraphicVersion);
#endif
GfuiMenuCreateButtonControl(ScrHandle, menuDescHdle, "ApplyButton", PrevScrHandle, storeSimuCfg);
GfuiMenuCreateButtonControl(ScrHandle, menuDescHdle, "CancelButton", PrevScrHandle, GfuiScreenActivate);