2
0
mirror of https://github.com/dpethes/rerogue.git synced 2025-06-07 18:58:32 +02:00

terrain viewer: plug memleaks

This commit is contained in:
dpethes 2020-06-15 11:23:44 +02:00
parent 909cfe5a97
commit 2b1f49b7ba
5 changed files with 92 additions and 9 deletions

View File

@ -111,6 +111,17 @@ begin
CloseFile(f);
end;
procedure FreeNode(node: PRsDatFileNode);
var
i: Integer;
begin
if node^.nodes <> nil then begin
for i := 0 to Length(node^.nodes) - 1 do
FreeNode(node^.nodes[i]);
node^.nodes := nil;
end;
end;
{ TRSDatFile }
constructor TRSDatFile.Create(const hdr_file, dat_file: string);
@ -120,8 +131,14 @@ begin
end;
destructor TRSDatFile.Destroy;
var
section: TRsHdrSection;
node: TRsDatFileNode;
begin
inherited Destroy;
for section in m_sections do
for node in section.nodes do
FreeNode(@node);
m_sections := nil;
freemem(m_data);
end;

View File

@ -249,8 +249,15 @@ begin
end;
destructor TWorld.Destroy;
var
tex: PByte;
begin
if height_texture <> nil then Freemem(height_texture);
for tex in heightmap.textures do
freemem(tex);
freemem(heightmap.tiles);
freemem(heightmap.blk);
heightmap.textures := nil;
inherited Destroy;
end;

View File

@ -183,8 +183,17 @@ begin
end;
destructor TTerrainMesh.Destroy;
var
i: Integer;
begin
inherited Destroy;
for i := 0 to Length(render_batches) - 1 do begin
freemem(render_batches[i].vertices);
freemem(render_batches[i].normals);
freemem(render_batches[i].face_indices);
end;
render_batches := nil;
terrain.Free;
end;
procedure TTerrainMesh.Load(level: TLevelListItem);
@ -280,6 +289,7 @@ begin
if end_idx > render_blocks.Count - 1 then
break;
end;
render_blocks.Free;
end;

View File

@ -17,8 +17,34 @@
<i18n>
<EnableI18N LFM="False"/>
</i18n>
<BuildModes Count="1">
<Item1 Name="Default" Default="True"/>
<BuildModes Count="2">
<Item1 Name="Debug" Default="True"/>
<Item2 Name="Release">
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="terrain_viewer"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<OtherUnitFiles Value="..\rs_units;imgui;sdl2"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<Optimizations>
<OptimizationLevel Value="3"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="False"/>
</Debugging>
<LinkSmart Value="True"/>
</Linking>
</CompilerOptions>
</Item2>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
@ -88,6 +114,28 @@
<OtherUnitFiles Value="..\rs_units;imgui;sdl2"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<IncludeAssertionCode Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<Checks>
<IOChecks Value="True"/>
<RangeChecks Value="True"/>
<OverflowChecks Value="True"/>
<StackChecks Value="True"/>
</Checks>
<VerifyObjMethodCallValidity Value="True"/>
</CodeGeneration>
<Linking>
<Debugging>
<DebugInfoType Value="dsDwarf2Set"/>
<UseHeaptrc Value="True"/>
<TrashVariables Value="True"/>
<UseExternalDbgSyms Value="True"/>
</Debugging>
</Linking>
</CompilerOptions>
<Debugging>
<Exceptions Count="2">

View File

@ -37,7 +37,7 @@ var
g_window: PSDL_Window;
g_ogl_context: TSDL_GLContext;
g_rsdata: TRSDatFile;
g_rs_files: TRsDatFileNodeList;
g_levels: TLevelList;
g_selected_level_idx: integer = 0;
@ -390,13 +390,11 @@ procedure LoadLevelFilelist;
g_levels.PushBack(item);
end;
var
rs_files: TRsDatFileNodeList;
fnode: TRsDatFileNode;
data_dir, level_dir, map_dir: PRsDatFileNode;
begin
//go to data/level/
rs_files := g_rsdata.GetStructure();
for fnode in rs_files do begin
for fnode in g_rs_files do begin
if fnode.is_directory and (fnode.Name = 'data') then begin
data_dir := @fnode;
break;
@ -416,6 +414,7 @@ end;
//******************************************************************************
var
rsdata: TRSDatFile;
sec, frames: integer;
event: TSDL_Event;
done: boolean;
@ -427,8 +426,9 @@ begin
end;
writeln('loading data');
g_rsdata := TRSDatFile.Create(RS_DATA_HDR, RS_DATA_DAT);
g_rsdata.Parse();
rsdata := TRSDatFile.Create(RS_DATA_HDR, RS_DATA_DAT);
rsdata.Parse();
g_rs_files := rsdata.GetStructure();
g_levels := TLevelList.Create;
LoadLevelFilelist;
@ -468,6 +468,7 @@ begin
terrain.Free;
SDL_Quit;
g_levels.Free;
g_rsdata.Free;
g_rs_files.Free;
rsdata.Free;
end.