mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-14 00:54:05 +02:00
3DS underwater color, some fixes for UI
This commit is contained in:
@@ -57,7 +57,7 @@ namespace GAPI {
|
||||
|
||||
struct Shader {
|
||||
shaderProgram_s program;
|
||||
C3D_TexEnv env;
|
||||
C3D_TexEnv env[2];
|
||||
|
||||
int32 uID[uMAX];
|
||||
|
||||
@@ -77,7 +77,14 @@ namespace GAPI {
|
||||
default : src = compose_dvlb;
|
||||
}
|
||||
|
||||
shaderProgramSetVsh(&program, &src->DVLE[0]);
|
||||
shaderProgramSetVsh(&program, &src->DVLE[0]);
|
||||
|
||||
bool underwater = false;
|
||||
for (int i = 0; i < defCount; i++) {
|
||||
if (def[i] == SD_UNDERWATER) {
|
||||
underwater = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (int ut = 0; ut < uMAX; ut++) {
|
||||
uID[ut] = shaderInstanceGetUniformLocation(program.vertexShader, UniformName[ut]);
|
||||
@@ -85,11 +92,19 @@ namespace GAPI {
|
||||
|
||||
rebind = true;
|
||||
|
||||
C3D_TexEnvInit(&env);
|
||||
C3D_TexEnvSrc(&env, C3D_Both, GPU_TEXTURE0, GPU_PRIMARY_COLOR, GPU_PRIMARY_COLOR);
|
||||
C3D_TexEnvFunc(&env, C3D_Both, GPU_MODULATE);
|
||||
C3D_TexEnvInit(&env[0]);
|
||||
C3D_TexEnvInit(&env[1]);
|
||||
|
||||
C3D_TexEnvSrc(&env[0], C3D_Both, GPU_TEXTURE0, GPU_PRIMARY_COLOR, GPU_PRIMARY_COLOR);
|
||||
C3D_TexEnvFunc(&env[0], C3D_Both, GPU_MODULATE);
|
||||
if (Core::pass == Core::passCompose && type == 2) { // rooms
|
||||
C3D_TexEnvScale(&env, C3D_RGB, GPU_TEVSCALE_2);
|
||||
C3D_TexEnvScale(&env[0], C3D_RGB, GPU_TEVSCALE_2);
|
||||
}
|
||||
|
||||
if (underwater) {
|
||||
C3D_TexEnvSrc(&env[1], C3D_Both, GPU_PREVIOUS, GPU_CONSTANT, GPU_PRIMARY_COLOR);
|
||||
C3D_TexEnvFunc(&env[1], C3D_Both, GPU_MODULATE);
|
||||
C3D_TexEnvColor(&env[1], 0xFFE5E599); // modulate by underwater color
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +123,8 @@ namespace GAPI {
|
||||
void validate() {
|
||||
if (rebind) {
|
||||
C3D_BindProgram(&program);
|
||||
C3D_SetTexEnv(0, &env);
|
||||
C3D_SetTexEnv(0, &env[0]);
|
||||
C3D_SetTexEnv(1, &env[1]);
|
||||
rebind = false;
|
||||
}
|
||||
|
||||
|
@@ -159,19 +159,39 @@ static const OptionItem optSound[] = {
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_LANGUAGE, SETTINGS( audio.language ), STR_LANG_EN, 0, 10 ),
|
||||
};
|
||||
|
||||
#if defined(_OS_CLOVER) || defined(_OS_PSC)
|
||||
#define INV_GAMEPAD_ONLY
|
||||
#endif
|
||||
|
||||
#if defined(_OS_PSP) || defined(_OS_PSV) || defined(_OS_3DS)
|
||||
#define INV_SINGLE_PLAYER
|
||||
#define INV_GAMEPAD_ONLY
|
||||
#define INV_CTRL_START_OPTION 1
|
||||
#else
|
||||
#define INV_CTRL_START_OPTION 2
|
||||
#endif
|
||||
|
||||
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_RPI)
|
||||
#define INV_VIBRATION
|
||||
#endif
|
||||
|
||||
static const OptionItem optControls[] = {
|
||||
OptionItem( OptionItem::TYPE_TITLE, STR_SET_CONTROLS ),
|
||||
OptionItem( ),
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY, SETTINGS( playerIndex ), STR_PLAYER_1, 0, 1 ),
|
||||
#ifndef _OS_CLOVER
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_GAMEPAD, SETTINGS( controls[0].joyIndex ), STR_GAMEPAD_1, 0, 3 ),
|
||||
#ifndef INV_SINGLE_PLAYER
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( playerIndex ), STR_PLAYER_1, 0, 1 ),
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_GAMEPAD , SETTINGS( controls[0].joyIndex ), STR_GAMEPAD_1, 0, 3 ),
|
||||
#endif
|
||||
#if defined(_OS_WIN) || defined(_OS_LINUX) || defined(_OS_RPI)
|
||||
#ifdef INV_VIBRATION
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_VIBRATION , SETTINGS( controls[0].vibration ), STR_OFF, 0, 1 ),
|
||||
#endif
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_RETARGET , SETTINGS( controls[0].retarget ), STR_OFF, 0, 1 ),
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_OPT_CONTROLS_MULTIAIM , SETTINGS( controls[0].multiaim ), STR_OFF, 0, 1 ),
|
||||
#ifdef INV_GAMEPAD_ONLY
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( playerIndex ), STR_OPT_CONTROLS_GAMEPAD, 0, 0 ),
|
||||
#else
|
||||
OptionItem( OptionItem::TYPE_PARAM, STR_EMPTY , SETTINGS( ctrlIndex ), STR_OPT_CONTROLS_KEYBOARD, 0, 1 ),
|
||||
#endif
|
||||
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cUp , SETTINGS( controls[0].keys[ cUp ] ), STR_KEY_FIRST ),
|
||||
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cDown , SETTINGS( controls[0].keys[ cDown ] ), STR_KEY_FIRST ),
|
||||
OptionItem( OptionItem::TYPE_KEY, STR_CTRL_FIRST + cRight , SETTINGS( controls[0].keys[ cRight ] ), STR_KEY_FIRST ),
|
||||
@@ -403,13 +423,12 @@ struct Inventory {
|
||||
case TR::Entity::INV_SOUND :
|
||||
optCount = COUNT(optSound);
|
||||
return optSound;
|
||||
case TR::Entity::INV_CONTROLS :
|
||||
ASSERT(optControls[2].offset == SETTINGS( playerIndex) );
|
||||
case TR::Entity::INV_CONTROLS : {
|
||||
for (int i = 0; i < COUNT(optControls); i++) {
|
||||
OptionItem &opt = optControlsPlayer[i];
|
||||
opt = optControls[i];
|
||||
|
||||
if (i > 2 && opt.offset != SETTINGS( playerIndex ) && opt.offset != SETTINGS( ctrlIndex ) )
|
||||
if (i > INV_CTRL_START_OPTION && opt.offset != SETTINGS( playerIndex ) && opt.offset != SETTINGS( ctrlIndex ) )
|
||||
opt.offset += sizeof(Core::Settings::Controls) * Core::settings.playerIndex;
|
||||
|
||||
if (opt.type == OptionItem::TYPE_KEY) {
|
||||
@@ -422,6 +441,7 @@ struct Inventory {
|
||||
}
|
||||
optCount = COUNT(optControlsPlayer);
|
||||
return optControlsPlayer;
|
||||
}
|
||||
default :
|
||||
optCount = 0;
|
||||
return NULL;
|
||||
@@ -967,7 +987,11 @@ struct Inventory {
|
||||
}
|
||||
case TR::Entity::INV_CONTROLS :
|
||||
Core::settings.playerIndex = 0;
|
||||
Core::settings.ctrlIndex = 0;
|
||||
#ifdef INV_GAMEPAD_ONLY
|
||||
Core::settings.ctrlIndex = 1;
|
||||
#else
|
||||
Core::settings.ctrlIndex = 0;
|
||||
#endif
|
||||
break;
|
||||
case TR::Entity::INV_DETAIL :
|
||||
settings = Core::settings;
|
||||
@@ -1234,8 +1258,11 @@ struct Inventory {
|
||||
newKey = Input::lastKey;
|
||||
} else {
|
||||
JoyKey jk = Input::joy[Core::settings.controls[Core::settings.playerIndex].joyIndex].lastKey;
|
||||
if (Core::settings.ctrlIndex == 1 && jk != jkNone)
|
||||
if (Core::settings.ctrlIndex == 1 && jk != jkNone) {
|
||||
newKey = jk;
|
||||
} else if (Input::lastKey != ikNone) {
|
||||
waitForKey = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (newKey != -1) {
|
||||
|
33
src/mesh.h
33
src/mesh.h
@@ -1285,16 +1285,17 @@ struct MeshBuilder {
|
||||
int16 minY = int16(pos.y);
|
||||
int16 maxX = int16(size.x) + minX;
|
||||
int16 maxY = int16(size.y) + minY;
|
||||
int16 s = 1;
|
||||
|
||||
vertices[vCount + 0].coord = short4( minX, minY, 0, 1 );
|
||||
vertices[vCount + 1].coord = short4( maxX, minY, 0, 1 );
|
||||
vertices[vCount + 2].coord = short4( maxX, int16(minY + 1), 0, 1 );
|
||||
vertices[vCount + 3].coord = short4( minX, int16(minY + 1), 0, 1 );
|
||||
vertices[vCount + 0].coord = short4( minX - s, minY - s, 0, 1 );
|
||||
vertices[vCount + 1].coord = short4( maxX + s, minY - s, 0, 1 );
|
||||
vertices[vCount + 2].coord = short4( maxX + s, minY + s, 0, 1 );
|
||||
vertices[vCount + 3].coord = short4( minX - s, minY + s, 0, 1 );
|
||||
|
||||
vertices[vCount + 4].coord = short4( minX, minY, 0, 1 );
|
||||
vertices[vCount + 5].coord = short4( int16(minX + 1), minY, 0, 1 );
|
||||
vertices[vCount + 6].coord = short4( int16(minX + 1), maxY, 0, 1 );
|
||||
vertices[vCount + 7].coord = short4( minX, maxY, 0, 1 );
|
||||
vertices[vCount + 4].coord = short4( minX - s, minY - s, 0, 1 );
|
||||
vertices[vCount + 5].coord = short4( minX + s, minY - s, 0, 1 );
|
||||
vertices[vCount + 6].coord = short4( minX + s, maxY + s, 0, 1 );
|
||||
vertices[vCount + 7].coord = short4( minX - s, maxY + s, 0, 1 );
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
Vertex &v = vertices[vCount + i];
|
||||
@@ -1306,15 +1307,15 @@ struct MeshBuilder {
|
||||
addQuad(indices, iCount, vCount, 0, vertices, NULL, false, false); vCount += 4;
|
||||
addQuad(indices, iCount, vCount, 0, vertices, NULL, false, false); vCount += 4;
|
||||
|
||||
vertices[vCount + 0].coord = short4( minX, int16(maxY - 1), 0, 1 );
|
||||
vertices[vCount + 1].coord = short4( maxX, int16(maxY - 1), 0, 1 );
|
||||
vertices[vCount + 2].coord = short4( maxX, maxY, 0, 1 );
|
||||
vertices[vCount + 3].coord = short4( minX, maxY, 0, 1 );
|
||||
vertices[vCount + 0].coord = short4( minX + s, maxY - s, 0, 1 );
|
||||
vertices[vCount + 1].coord = short4( maxX + s, maxY - s, 0, 1 );
|
||||
vertices[vCount + 2].coord = short4( maxX + s, maxY + s, 0, 1 );
|
||||
vertices[vCount + 3].coord = short4( minX + s, maxY + s, 0, 1 );
|
||||
|
||||
vertices[vCount + 4].coord = short4( int16(maxX - 1), minY, 0, 1 );
|
||||
vertices[vCount + 5].coord = short4( maxX, minY, 0, 1 );
|
||||
vertices[vCount + 6].coord = short4( maxX, maxY, 0, 1 );
|
||||
vertices[vCount + 7].coord = short4( int16(maxX - 1), maxY, 0, 1 );
|
||||
vertices[vCount + 4].coord = short4( maxX - s, minY + s, 0, 1 );
|
||||
vertices[vCount + 5].coord = short4( maxX + s, minY + s, 0, 1 );
|
||||
vertices[vCount + 6].coord = short4( maxX + s, maxY + s, 0, 1 );
|
||||
vertices[vCount + 7].coord = short4( maxX - s, maxY + s, 0, 1 );
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
Vertex &v = vertices[vCount + i];
|
||||
|
Reference in New Issue
Block a user