2
0
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:
dpethes 2020-06-15 22:47:40 +02:00
parent d42f895773
commit c3be5c72f0
2 changed files with 16 additions and 5 deletions

View File

@ -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.

View File

@ -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;