DEADSOFTWARE

render: hide panel textures into render
[d2df-sdl.git] / src / game / opengl / r_game.pas
index 3d2befe2b9808707f47fea4143b95ff09c4a7d12..ec87b29133416e670dcfdd3462df0b489e1d242d 100644 (file)
@@ -25,14 +25,18 @@ implementation
 
   uses
     {$INCLUDE ../nogl/noGLuses.inc}
+{$IFDEF ENABLE_HOLMES}
+    g_holmes,
+{$ENDIF}
     SysUtils, Classes, Math,
-    e_graphics,
+    g_base, r_graphics,
     g_system, g_touch,
     MAPDEF, xprofiler, utils, wadreader,
-    g_textures, e_input, e_sound,
-    g_language, g_console, g_menu, g_triggers, g_player, g_options, g_monsters, g_map, g_panel, g_window,
+    e_input, e_sound,
+    g_language, g_console, g_menu, g_triggers, g_player, g_options, g_monsters, g_map, g_panel,
     g_items, g_weapons, g_gfx, g_phys, g_net, g_gui, g_netmaster,
-    g_game, r_console, r_gfx, r_items, r_map, r_panel, r_monsters, r_weapons, r_netmaster, r_player
+    g_game, r_console, r_gfx, r_items, r_map, r_monsters, r_weapons, r_netmaster, r_player, r_textures,
+    r_playermodel
   ;
 
   var
@@ -820,7 +824,7 @@ begin
   else e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
 end;
 
-procedure DrawMinimap(p: TPlayer; RenderRect: e_graphics.TRect);
+procedure DrawMinimap(p: TPlayer; RenderRect: TRect);
 var
   a, aX, aY, aX2, aY2, Scale, ScaleSz: Integer;
 
@@ -1025,6 +1029,65 @@ begin
   e_AmbientQuad(sX, sY, sWidth, sHeight, ambColor.r, ambColor.g, ambColor.b, ambColor.a);
 end;
 
+// ////////////////////////////////////////////////////////////////////////// //
+var
+  ltexid: GLuint = 0;
+
+function g_Texture_Light (): Integer;
+const
+  Radius: Integer = 128;
+var
+  tex, tpp: PByte;
+  x, y, a: Integer;
+  dist: Double;
+begin
+  if ltexid = 0 then
+  begin
+    GetMem(tex, (Radius*2)*(Radius*2)*4);
+    tpp := tex;
+    for y := 0 to Radius*2-1 do
+    begin
+      for x := 0 to Radius*2-1 do
+      begin
+        dist := 1.0-sqrt((x-Radius)*(x-Radius)+(y-Radius)*(y-Radius))/Radius;
+        if (dist < 0) then
+        begin
+          tpp^ := 0; Inc(tpp);
+          tpp^ := 0; Inc(tpp);
+          tpp^ := 0; Inc(tpp);
+          tpp^ := 0; Inc(tpp);
+        end
+        else
+        begin
+          //tc.setPixel(x, y, Color(cast(int)(dist*255), cast(int)(dist*255), cast(int)(dist*255)));
+          if (dist > 0.5) then dist := 0.5;
+          a := round(dist*255);
+          if (a < 0) then a := 0 else if (a > 255) then a := 255;
+          tpp^ := 255; Inc(tpp);
+          tpp^ := 255; Inc(tpp);
+          tpp^ := 255; Inc(tpp);
+          tpp^ := Byte(a); Inc(tpp);
+        end;
+      end;
+    end;
+
+    glGenTextures(1, @ltexid);
+    //if (tid == 0) assert(0, "VGL: can't create screen texture");
+
+    glBindTexture(GL_TEXTURE_2D, ltexid);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+    //GLfloat[4] bclr = 0.0;
+    //glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, bclr.ptr);
+
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Radius*2, Radius*2, 0, GL_RGBA{gltt}, GL_UNSIGNED_BYTE, tex);
+  end;
+
+  result := ltexid;
+end;
 
 // setup sX, sY, sWidth, sHeight, and transformation matrix before calling this!
 //FIXME: broken for splitscreen mode
@@ -1242,6 +1305,7 @@ begin
   drawOther('weapons', @r_Weapon_Draw);
   drawOther('shells', @r_Player_DrawShells);
   drawOther('drawall', @r_Player_DrawAll);
+  drawOther('gibs', @r_PlayerModel_DrawGibs);
   drawOther('corpses', @r_Player_DrawCorpses);
   drawPanelType('*wall', PANEL_WALL, g_rlayer_wall);
   drawOther('monsters', @r_Monsters_Draw);
@@ -1501,7 +1565,7 @@ var
 begin
   if gExit = EXIT_QUIT then Exit;
 
-  Time := sys_GetTicks() {div 1000};
+  Time := GetTickCount64() {div 1000};
   FPSCounter := FPSCounter+1;
   if Time - FPSTime >= 1000 then
   begin