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:
parent
909cfe5a97
commit
2b1f49b7ba
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
@ -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">
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user