mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 01:58:19 +00:00
4089: log git revision hash to stdout/console r=def- a=edg-l Fixes #3963 ## Checklist - [x] Tested the change ingame - [ ] Provided screenshots if it is a visual change - [ ] Tested in combination with possibly related configuration options - [ ] Written a unit test if it works standalone, system.c especially - [ ] Considered possible null pointers and out of bounds array indexing - [x] Changed no physics that affect existing maps - [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional) 4093: Make fallback stronger and safer r=def- a=Jupeyy - Save renderer & version string, so the fallback isn't portable between driver updates or system changes - Only allow modern GL on modern systems(windows) - Don't show modern GL in settings, if the driver is on the blocklist(this prevents Intel users from doing it, they can still force it over F1 console) ## Checklist - [x] Tested the change ingame - [ ] Provided screenshots if it is a visual change - [ ] Tested in combination with possibly related configuration options - [ ] Written a unit test if it works standalone, system.c especially - [ ] Considered possible null pointers and out of bounds array indexing - [ ] Changed no physics that affect existing maps - [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional) 4094: Add prediction for switch tiles r=def- a=trml Prediction of freeze and other tiles in switch layer (for #3990) ## Checklist - [x] Tested the change ingame - [ ] Provided screenshots if it is a visual change - [ ] Tested in combination with possibly related configuration options - [ ] Written a unit test if it works standalone, system.c especially - [x] Considered possible null pointers and out of bounds array indexing - [x] Changed no physics that affect existing maps - [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional) Co-authored-by: Edgar Luque <git@edgarluque.com> Co-authored-by: Edgar <git@edgarluque.com> Co-authored-by: Jupeyy <jupjopjap@gmail.com> Co-authored-by: trml <trml@users.noreply.github.com>
This commit is contained in:
commit
dba212112d
|
@ -1741,12 +1741,14 @@ bool CCommandProcessorFragment_OpenGL2::Cmd_Init(const SCommand_Init *pCommand)
|
|||
glUseProgram(0);
|
||||
}
|
||||
|
||||
if(g_Config.m_Gfx3DTextureAnalysisDone == 0)
|
||||
if(g_Config.m_Gfx3DTextureAnalysisDone == 0 || str_comp(g_Config.m_Gfx3DTextureAnalysisRenderer, pCommand->m_pRendererString) != 0 || str_comp(g_Config.m_Gfx3DTextureAnalysisVersion, pCommand->m_pVersionString) != 0)
|
||||
{
|
||||
AnalysisCorrect = IsTileMapAnalysisSucceeded();
|
||||
if(AnalysisCorrect)
|
||||
{
|
||||
g_Config.m_Gfx3DTextureAnalysisDone = 1;
|
||||
str_copy(g_Config.m_Gfx3DTextureAnalysisRenderer, pCommand->m_pRendererString, sizeof(g_Config.m_Gfx3DTextureAnalysisRenderer) / sizeof(g_Config.m_Gfx3DTextureAnalysisRenderer[0]));
|
||||
str_copy(g_Config.m_Gfx3DTextureAnalysisVersion, pCommand->m_pVersionString, sizeof(g_Config.m_Gfx3DTextureAnalysisVersion) / sizeof(g_Config.m_Gfx3DTextureAnalysisVersion[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -347,6 +347,8 @@ static bool BackendInitGlew(EBackendType BackendType, int &GlewMajor, int &GlewM
|
|||
GlewPatch = 0;
|
||||
return true;
|
||||
}
|
||||
// Don't allow GL 3.3, if the driver doesn't support atleast OpenGL 4.5
|
||||
#ifndef CONF_PLATFORM_WINDOWS
|
||||
if(GLEW_VERSION_4_4)
|
||||
{
|
||||
GlewMajor = 4;
|
||||
|
@ -389,6 +391,7 @@ static bool BackendInitGlew(EBackendType BackendType, int &GlewMajor, int &GlewM
|
|||
GlewPatch = 0;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
if(GLEW_VERSION_3_0)
|
||||
{
|
||||
GlewMajor = 3;
|
||||
|
|
|
@ -403,6 +403,9 @@ MACRO_CONFIG_INT(GfxOpenGLPatch, gfx_opengl_patch, 0, 0, 10, CFGFLAG_SAVE | CFGF
|
|||
MACRO_CONFIG_INT(GfxOpenGLTextureLODBIAS, gfx_opengl_texture_lod_bias, -500, -15000, 15000, CFGFLAG_SAVE | CFGFLAG_CLIENT, "The lod bias for OpenGL texture sampling multiplied by 1000")
|
||||
|
||||
MACRO_CONFIG_INT(Gfx3DTextureAnalysisDone, gfx_3d_texture_analysis_done, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Analyzed, if sampling 3D/2D array textures was correct")
|
||||
MACRO_CONFIG_STR(Gfx3DTextureAnalysisRenderer, gfx_3d_texture_analysis_renderer, 128, "", CFGFLAG_SAVE | CFGFLAG_CLIENT, "The renderer on which the analysis was performed")
|
||||
MACRO_CONFIG_STR(Gfx3DTextureAnalysisVersion, gfx_3d_texture_analysis_version, 128, "", CFGFLAG_SAVE | CFGFLAG_CLIENT, "The version on which the analysis was performed")
|
||||
|
||||
MACRO_CONFIG_INT(GfxDriverIsBlocked, gfx_driver_is_blocked, 0, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "If 1, the current driver is in a blocked error state.")
|
||||
#if !defined(CONF_PLATFORM_MACOS)
|
||||
MACRO_CONFIG_INT(GfxEnableTextureUnitOptimization, gfx_enable_texture_unit_optimization, 1, 0, 1, CFGFLAG_SAVE | CFGFLAG_CLIENT, "Use multiple texture units, instead of only one.")
|
||||
|
|
|
@ -1197,38 +1197,43 @@ void CMenus::RenderSettingsGraphics(CUIRect MainView)
|
|||
if(DoButton_CheckBox(&g_Config.m_GfxHighDetail, Localize("High Detail"), g_Config.m_GfxHighDetail, &Button))
|
||||
g_Config.m_GfxHighDetail ^= 1;
|
||||
|
||||
MainView.HSplitTop(20.0f, &Button, &MainView);
|
||||
bool IsNewOpenGL = Graphics()->IsConfigModernAPI();
|
||||
|
||||
if(DoButton_CheckBox(&g_Config.m_GfxOpenGLMajor, Localize("Use modern OpenGL"), IsNewOpenGL, &Button))
|
||||
// only promote modern GL in menu settings if the driver isn't on the blocklist already
|
||||
if(g_Config.m_GfxDriverIsBlocked == 0)
|
||||
{
|
||||
CheckSettings = true;
|
||||
MainView.HSplitTop(20.0f, &Button, &MainView);
|
||||
|
||||
if(DoButton_CheckBox(&g_Config.m_GfxOpenGLMajor, Localize("Use modern OpenGL"), IsNewOpenGL, &Button))
|
||||
{
|
||||
CheckSettings = true;
|
||||
if(IsNewOpenGL)
|
||||
{
|
||||
Graphics()->GetDriverVersion(GRAPHICS_DRIVER_AGE_TYPE_DEFAULT, g_Config.m_GfxOpenGLMajor, g_Config.m_GfxOpenGLMinor, g_Config.m_GfxOpenGLPatch);
|
||||
IsNewOpenGL = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Graphics()->GetDriverVersion(GRAPHICS_DRIVER_AGE_TYPE_MODERN, g_Config.m_GfxOpenGLMajor, g_Config.m_GfxOpenGLMinor, g_Config.m_GfxOpenGLPatch);
|
||||
IsNewOpenGL = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(IsNewOpenGL)
|
||||
{
|
||||
Graphics()->GetDriverVersion(GRAPHICS_DRIVER_AGE_TYPE_DEFAULT, g_Config.m_GfxOpenGLMajor, g_Config.m_GfxOpenGLMinor, g_Config.m_GfxOpenGLPatch);
|
||||
IsNewOpenGL = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
Graphics()->GetDriverVersion(GRAPHICS_DRIVER_AGE_TYPE_MODERN, g_Config.m_GfxOpenGLMajor, g_Config.m_GfxOpenGLMinor, g_Config.m_GfxOpenGLPatch);
|
||||
IsNewOpenGL = true;
|
||||
}
|
||||
}
|
||||
MainView.HSplitTop(20.0f, &Button, &MainView);
|
||||
if(DoButton_CheckBox(&g_Config.m_GfxUsePreinitBuffer, Localize("Preinit VBO (iGPUs only)"), g_Config.m_GfxUsePreinitBuffer, &Button))
|
||||
{
|
||||
CheckSettings = true;
|
||||
g_Config.m_GfxUsePreinitBuffer ^= 1;
|
||||
}
|
||||
|
||||
if(IsNewOpenGL)
|
||||
{
|
||||
MainView.HSplitTop(20.0f, &Button, &MainView);
|
||||
if(DoButton_CheckBox(&g_Config.m_GfxUsePreinitBuffer, Localize("Preinit VBO (iGPUs only)"), g_Config.m_GfxUsePreinitBuffer, &Button))
|
||||
{
|
||||
CheckSettings = true;
|
||||
g_Config.m_GfxUsePreinitBuffer ^= 1;
|
||||
}
|
||||
|
||||
MainView.HSplitTop(20.0f, &Button, &MainView);
|
||||
if(DoButton_CheckBox(&g_Config.m_GfxEnableTextureUnitOptimization, Localize("Multiple texture units (disable for macOS)"), g_Config.m_GfxEnableTextureUnitOptimization, &Button))
|
||||
{
|
||||
CheckSettings = true;
|
||||
g_Config.m_GfxEnableTextureUnitOptimization ^= 1;
|
||||
MainView.HSplitTop(20.0f, &Button, &MainView);
|
||||
if(DoButton_CheckBox(&g_Config.m_GfxEnableTextureUnitOptimization, Localize("Multiple texture units (disable for macOS)"), g_Config.m_GfxEnableTextureUnitOptimization, &Button))
|
||||
{
|
||||
CheckSettings = true;
|
||||
g_Config.m_GfxEnableTextureUnitOptimization ^= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1400,6 +1400,8 @@ void CGameClient::OnNewSnapshot()
|
|||
m_Snap.m_paFlags[Item.m_ID % 2] = (const CNetObj_Flag *)pData;
|
||||
else if(Item.m_Type == NETOBJTYPE_SWITCHSTATE)
|
||||
{
|
||||
m_Snap.m_HasSwitchState = true;
|
||||
|
||||
const CNetObj_SwitchState *pSwitchStateData = (const CNetObj_SwitchState *)pData;
|
||||
CClientData *pClient = &m_aClients[Item.m_ID];
|
||||
|
||||
|
@ -2198,6 +2200,32 @@ void CGameClient::UpdatePrediction()
|
|||
m_GameWorld.m_WorldConfig.m_InfiniteAmmo = false;
|
||||
m_GameWorld.m_WorldConfig.m_IsSolo = !m_Snap.m_aCharacters[m_Snap.m_LocalClientID].m_HasExtendedData && !m_Tuning[g_Config.m_ClDummy].m_PlayerCollision && !m_Tuning[g_Config.m_ClDummy].m_PlayerHooking;
|
||||
|
||||
// update switch state
|
||||
if(Collision()->m_pSwitchers)
|
||||
{
|
||||
const int NumSwitchers = minimum(255, Collision()->m_NumSwitchers);
|
||||
for(int i = 0; i < MAX_CLIENTS; i++)
|
||||
{
|
||||
int Team = m_Teams.Team(i);
|
||||
if(!m_Snap.m_aCharacters[i].m_Active || !in_range(Team, 0, MAX_CLIENTS - 1))
|
||||
continue;
|
||||
for(int Number = 1; Number <= NumSwitchers; Number++)
|
||||
{
|
||||
if(m_Snap.m_HasSwitchState && m_aClients[i].m_SwitchStates[Number])
|
||||
{
|
||||
Collision()->m_pSwitchers[Number].m_Status[Team] = true;
|
||||
Collision()->m_pSwitchers[Number].m_Type[Team] = TILE_SWITCHOPEN;
|
||||
}
|
||||
else
|
||||
{
|
||||
Collision()->m_pSwitchers[Number].m_Status[Team] = false;
|
||||
Collision()->m_pSwitchers[Number].m_Type[Team] = TILE_SWITCHCLOSE;
|
||||
}
|
||||
Collision()->m_pSwitchers[Number].m_EndTick[Team] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// update the tuning/tunezone at the local character position with the latest tunings received before the new snapshot
|
||||
vec2 LocalCharPos = vec2(m_Snap.m_pLocalCharacter->m_X, m_Snap.m_pLocalCharacter->m_Y);
|
||||
m_GameWorld.m_Core.m_Tuning[g_Config.m_ClDummy] = m_Tuning[g_Config.m_ClDummy];
|
||||
|
|
|
@ -311,6 +311,8 @@ public:
|
|||
vec2 m_Position;
|
||||
};
|
||||
|
||||
bool m_HasSwitchState;
|
||||
|
||||
CCharacterInfo m_aCharacters[MAX_CLIENTS];
|
||||
};
|
||||
|
||||
|
|
|
@ -674,7 +674,9 @@ void CCharacter::HandleSkippableTiles(int Index)
|
|||
|
||||
bool CCharacter::IsSwitchActiveCb(int Number, void *pUser)
|
||||
{
|
||||
return false; //switch state is not implemented in prediction yet
|
||||
CCharacter *pThis = (CCharacter *)pUser;
|
||||
CCollision *pCollision = pThis->Collision();
|
||||
return pCollision->m_pSwitchers && pThis->Team() != TEAM_SUPER && pCollision->m_pSwitchers[Number].m_Status[pThis->Team()];
|
||||
}
|
||||
|
||||
void CCharacter::HandleTiles(int Index)
|
||||
|
@ -701,6 +703,69 @@ void CCharacter::HandleTiles(int Index)
|
|||
return;
|
||||
}
|
||||
|
||||
// handle switch tiles
|
||||
if(Collision()->IsSwitch(MapIndex) == TILE_FREEZE && Team() != TEAM_SUPER)
|
||||
{
|
||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Collision()->m_pSwitchers[Collision()->GetSwitchNumber(MapIndex)].m_Status[Team()])
|
||||
Freeze(Collision()->GetSwitchDelay(MapIndex));
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_DFREEZE && Team() != TEAM_SUPER)
|
||||
{
|
||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Collision()->m_pSwitchers[Collision()->GetSwitchNumber(MapIndex)].m_Status[Team()])
|
||||
m_DeepFreeze = true;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_DUNFREEZE && Team() != TEAM_SUPER)
|
||||
{
|
||||
if(Collision()->GetSwitchNumber(MapIndex) == 0 || Collision()->m_pSwitchers[Collision()->GetSwitchNumber(MapIndex)].m_Status[Team()])
|
||||
m_DeepFreeze = false;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_HIT_ENABLE && m_Hit & DISABLE_HIT_HAMMER && Collision()->GetSwitchDelay(MapIndex) == WEAPON_HAMMER)
|
||||
{
|
||||
m_Hit &= ~DISABLE_HIT_HAMMER;
|
||||
m_Core.m_NoHammerHit = false;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_HIT_DISABLE && !(m_Hit & DISABLE_HIT_HAMMER) && Collision()->GetSwitchDelay(MapIndex) == WEAPON_HAMMER)
|
||||
{
|
||||
m_Hit |= DISABLE_HIT_HAMMER;
|
||||
m_Core.m_NoHammerHit = true;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_HIT_ENABLE && m_Hit & DISABLE_HIT_SHOTGUN && Collision()->GetSwitchDelay(MapIndex) == WEAPON_SHOTGUN)
|
||||
{
|
||||
m_Hit &= ~DISABLE_HIT_SHOTGUN;
|
||||
m_Core.m_NoShotgunHit = false;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_HIT_DISABLE && !(m_Hit & DISABLE_HIT_SHOTGUN) && Collision()->GetSwitchDelay(MapIndex) == WEAPON_SHOTGUN)
|
||||
{
|
||||
m_Hit |= DISABLE_HIT_SHOTGUN;
|
||||
m_Core.m_NoShotgunHit = true;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_HIT_ENABLE && m_Hit & DISABLE_HIT_GRENADE && Collision()->GetSwitchDelay(MapIndex) == WEAPON_GRENADE)
|
||||
{
|
||||
m_Hit &= ~DISABLE_HIT_GRENADE;
|
||||
m_Core.m_NoGrenadeHit = false;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_HIT_DISABLE && !(m_Hit & DISABLE_HIT_GRENADE) && Collision()->GetSwitchDelay(MapIndex) == WEAPON_GRENADE)
|
||||
{
|
||||
m_Hit |= DISABLE_HIT_GRENADE;
|
||||
m_Core.m_NoGrenadeHit = true;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_HIT_ENABLE && m_Hit & DISABLE_HIT_LASER && Collision()->GetSwitchDelay(MapIndex) == WEAPON_LASER)
|
||||
{
|
||||
m_Hit &= ~DISABLE_HIT_LASER;
|
||||
m_Core.m_NoLaserHit = false;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_HIT_DISABLE && !(m_Hit & DISABLE_HIT_LASER) && Collision()->GetSwitchDelay(MapIndex) == WEAPON_LASER)
|
||||
{
|
||||
m_Hit |= DISABLE_HIT_LASER;
|
||||
m_Core.m_NoLaserHit = true;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_JUMP)
|
||||
{
|
||||
int newJumps = Collision()->GetSwitchDelay(MapIndex);
|
||||
if(newJumps != m_Core.m_Jumps)
|
||||
m_Core.m_Jumps = newJumps;
|
||||
}
|
||||
|
||||
// freeze
|
||||
if(((m_TileIndex == TILE_FREEZE) || (m_TileFIndex == TILE_FREEZE)) && !m_Super && !m_DeepFreeze)
|
||||
{
|
||||
|
@ -809,29 +874,6 @@ void CCharacter::HandleTiles(int Index)
|
|||
{
|
||||
m_LastRefillJumps = false;
|
||||
}
|
||||
|
||||
// handle switch tiles
|
||||
if(Collision()->IsSwitch(MapIndex) == TILE_FREEZE && Team() != TEAM_SUPER && Collision()->GetSwitchNumber(MapIndex) == 0)
|
||||
{
|
||||
Freeze(Collision()->GetSwitchDelay(MapIndex));
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_DFREEZE && Team() != TEAM_SUPER && Collision()->GetSwitchNumber(MapIndex) == 0)
|
||||
{
|
||||
m_DeepFreeze = true;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_DUNFREEZE && Team() != TEAM_SUPER && Collision()->GetSwitchNumber(MapIndex) == 0)
|
||||
{
|
||||
m_DeepFreeze = false;
|
||||
}
|
||||
else if(Collision()->IsSwitch(MapIndex) == TILE_JUMP)
|
||||
{
|
||||
int newJumps = Collision()->GetSwitchDelay(MapIndex);
|
||||
|
||||
if(newJumps != m_Core.m_Jumps)
|
||||
{
|
||||
m_Core.m_Jumps = newJumps;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CCharacter::HandleTuneLayer()
|
||||
|
|
|
@ -3371,6 +3371,9 @@ void CGameContext::OnInit(/*class IKernel *pKernel*/)
|
|||
|
||||
//game.world.insert_entity(game.Controller);
|
||||
|
||||
if(GIT_SHORTREV_HASH)
|
||||
Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "git-revision", GIT_SHORTREV_HASH);
|
||||
|
||||
#ifdef CONF_DEBUG
|
||||
if(g_Config.m_DbgDummies)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue