mirror of
https://github.com/dpethes/rerogue.git
synced 2025-06-07 18:58:32 +02:00
terrain viewer: delete old textures when switching levels
This commit is contained in:
parent
d42f895773
commit
c3be5c72f0
@ -49,6 +49,7 @@ type
|
|||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure Load(level: TLevelListItem);
|
procedure Load(level: TLevelListItem);
|
||||||
procedure InitGL;
|
procedure InitGL;
|
||||||
|
procedure FinishGL;
|
||||||
procedure DrawGL(opts: TRenderOpts);
|
procedure DrawGL(opts: TRenderOpts);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -293,6 +294,14 @@ begin
|
|||||||
render_blocks.Free;
|
render_blocks.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTerrainMesh.FinishGL;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
for i := 0 to Length(render_batches) - 1 do
|
||||||
|
glDeleteTextures(1, @render_batches[i].texture_gl_index);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{ DrawGL
|
{ DrawGL
|
||||||
Renders terrain block batches.
|
Renders terrain block batches.
|
||||||
|
@ -119,8 +119,10 @@ end;
|
|||||||
procedure LoadLevel();
|
procedure LoadLevel();
|
||||||
begin
|
begin
|
||||||
Assert((0 <= g_selected_level_idx) and (g_selected_level_idx < g_levels.Size), 'broken level select');
|
Assert((0 <= g_selected_level_idx) and (g_selected_level_idx < g_levels.Size), 'broken level select');
|
||||||
if (terrain <> nil) then
|
if (terrain <> nil) then begin
|
||||||
|
terrain.FinishGL;
|
||||||
terrain.Free;
|
terrain.Free;
|
||||||
|
end;
|
||||||
terrain := TTerrainMesh.Create;
|
terrain := TTerrainMesh.Create;
|
||||||
terrain.Load(g_levels[g_selected_level_idx]);
|
terrain.Load(g_levels[g_selected_level_idx]);
|
||||||
terrain.InitGL;
|
terrain.InitGL;
|
||||||
@ -467,9 +469,6 @@ begin
|
|||||||
g_levels := TLevelList.Create;
|
g_levels := TLevelList.Create;
|
||||||
LoadLevelFilelist;
|
LoadLevelFilelist;
|
||||||
|
|
||||||
terrain := TTerrainMesh.Create;
|
|
||||||
terrain.Load(g_levels[g_selected_level_idx]);
|
|
||||||
|
|
||||||
writeln('Init SDL...');
|
writeln('Init SDL...');
|
||||||
SDL_Init(SDL_INIT_VIDEO or SDL_INIT_TIMER);
|
SDL_Init(SDL_INIT_VIDEO or SDL_INIT_TIMER);
|
||||||
WindowInit(SCR_W_INIT, SCR_H_INIT);
|
WindowInit(SCR_W_INIT, SCR_H_INIT);
|
||||||
@ -478,7 +477,9 @@ begin
|
|||||||
SetGLWindowSize(g_window^.w, g_window^.h);
|
SetGLWindowSize(g_window^.w, g_window^.h);
|
||||||
|
|
||||||
InitView;
|
InitView;
|
||||||
terrain.InitGL;
|
terrain := nil;
|
||||||
|
g_selected_level_idx := 0;
|
||||||
|
LoadLevel();
|
||||||
|
|
||||||
sec := SDL_GetTicks;
|
sec := SDL_GetTicks;
|
||||||
frames := 0;
|
frames := 0;
|
||||||
@ -501,6 +502,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
terrain.Free;
|
terrain.Free;
|
||||||
|
WindowFree;
|
||||||
SDL_Quit;
|
SDL_Quit;
|
||||||
g_levels.Free;
|
g_levels.Free;
|
||||||
g_rs_files.Free;
|
g_rs_files.Free;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user