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
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;
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;
Inc(g_dynLightCount);
end;
+
type
TEndCustomGameStat = record
PlayerStat: TPlayerStatArray;
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();
var
gwin_dump_extensions: Boolean = false;
gwin_has_stencil: Boolean = false;
+ gwin_k8_enable_light_experiments: Boolean = false;
implementation
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;
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);
{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);