From 7d312543a62c1a290f329110d16835c9065f0147 Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Wed, 16 Aug 2017 12:26:06 +0300 Subject: [PATCH] light experiments integrated into main tree; use "--twinkletwinkle" to turn it on --- src/game/g_game.pas | 21 ++++++++++++++------- src/game/g_window.pas | 27 +++++++++++++++++++-------- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/game/g_game.pas b/src/game/g_game.pas index 206d6e4..73e6b28 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -341,6 +341,7 @@ procedure g_ResetDynlights (); var lnum, idx: Integer; begin + if not gwin_has_stencil then begin g_dynLightCount := 0; exit; end; lnum := 0; for idx := 0 to g_dynLightCount-1 do begin @@ -367,6 +368,7 @@ end; procedure g_AddDynLight (x, y, radius: Integer; r, g, b, a: Single); begin + if not gwin_has_stencil then exit; if g_dynLightCount = length(g_dynLights) then SetLength(g_dynLights, g_dynLightCount+1024); g_dynLights[g_dynLightCount].x := x; g_dynLights[g_dynLightCount].y := y; @@ -381,6 +383,7 @@ end; procedure g_DynLightExplosion (x, y, radius: Integer; r, g, b: Single); begin + if not gwin_has_stencil then exit; if g_dynLightCount = length(g_dynLights) then SetLength(g_dynLights, g_dynLightCount+1024); g_dynLights[g_dynLightCount].x := x; g_dynLights[g_dynLightCount].y := y; @@ -394,6 +397,7 @@ begin Inc(g_dynLightCount); end; + type TEndCustomGameStat = record PlayerStat: TPlayerStatArray; @@ -1361,16 +1365,19 @@ begin end; // HACK: add dynlight here - if e_KeyPressed(IK_F8) and gGameOn and (not gConsoleShow) and (g_ActiveWindow = nil) then - begin - g_playerLight := true; - end; - if e_KeyPressed(IK_F9) and gGameOn and (not gConsoleShow) and (g_ActiveWindow = nil) then + if gwin_k8_enable_light_experiments then begin - g_playerLight := false; + if e_KeyPressed(IK_F8) and gGameOn and (not gConsoleShow) and (g_ActiveWindow = nil) then + begin + g_playerLight := true; + end; + if e_KeyPressed(IK_F9) and gGameOn and (not gConsoleShow) and (g_ActiveWindow = nil) then + begin + g_playerLight := false; + end; end; - if (g_playerLight) then g_AddDynLight(plr.GameX+32, plr.GameY+40, 128, 1, 1, 0, 0.6); + if gwin_has_stencil and g_playerLight then g_AddDynLight(plr.GameX+32, plr.GameY+40, 128, 1, 1, 0, 0.6); end; procedure g_Game_Update(); diff --git a/src/game/g_window.pas b/src/game/g_window.pas index 6dfa778..e7cc9cd 100644 --- a/src/game/g_window.pas +++ b/src/game/g_window.pas @@ -39,6 +39,7 @@ function g_Window_SetSize(W, H: Word; FScreen: Boolean): Boolean; var gwin_dump_extensions: Boolean = false; gwin_has_stencil: Boolean = false; + gwin_k8_enable_light_experiments: Boolean = false; implementation @@ -641,7 +642,10 @@ begin SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); // lights; it is enough to have 1-bit stencil buffer for lighting + if gwin_k8_enable_light_experiments then + begin + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); // lights; it is enough to have 1-bit stencil buffer for lighting + end; SDL_GL_SetSwapInterval(v); end; @@ -695,6 +699,12 @@ begin e_NoGraphics := True; {$ENDIF} + for idx := 1 to ParamCount do + begin + if ParamStr(idx) = '--opengl-dump-exts' then gwin_dump_extensions := true; + if ParamStr(idx) = '--twinkletwinkle' then gwin_k8_enable_light_experiments := true; + end; + e_WriteLog('Initializing OpenGL', MSG_NOTIFY); InitOpenGL(gVSync); @@ -707,16 +717,17 @@ begin {EnumDisplayModes();} - for idx := 1 to ParamCount do + if gwin_k8_enable_light_experiments then begin - if ParamStr(idx) = '--opengl-dump-exts' then gwin_dump_extensions := true; + SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, @ltmp); + e_WriteLog(Format('stencil buffer size: %d', [ltmp]), MSG_WARNING); + gwin_has_stencil := (ltmp > 0); + end + else + begin + gwin_has_stencil := false; end; - SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, @ltmp); - e_WriteLog(Format('stencil buffer size: %d', [ltmp]), MSG_WARNING); - - gwin_has_stencil := (ltmp > 0); - if not glHasExtension('GL_ARB_texture_non_power_of_two') then begin e_WriteLog('Driver DID''T advertised NPOT textures support', MSG_WARNING); -- 2.29.2