fixed memory leak in geo
This commit is contained in:
parent
f271eb856f
commit
386bf94d96
|
|
@ -68,14 +68,18 @@ const EventTimeline = struct {
|
||||||
// warning, due to laziness this uses timelineAllocator, which will leak
|
// warning, due to laziness this uses timelineAllocator, which will leak
|
||||||
pub fn dumpTimeline(filename: []const u8) !void {
|
pub fn dumpTimeline(filename: []const u8) !void {
|
||||||
if (MTGet()) |tracker| {
|
if (MTGet()) |tracker| {
|
||||||
|
core.engine_log("dumping timeline to file {s}", .{filename});
|
||||||
tracker.lock.lock();
|
tracker.lock.lock();
|
||||||
defer tracker.lock.unlock();
|
defer tracker.lock.unlock();
|
||||||
if (tracker.stackCompactor) |compactor| {
|
if (tracker.stackCompactor) |compactor| {
|
||||||
if (tracker.timeline) |timeline| {
|
if (tracker.timeline) |timeline| {
|
||||||
|
core.engine_log("2 {s}", .{filename});
|
||||||
const cwd = std.fs.cwd();
|
const cwd = std.fs.cwd();
|
||||||
const ofile = try std.fmt.allocPrint(timeline.timelineAllocator, core.DefaultSavePath ++ "/{s}", .{filename});
|
const ofile = try std.fmt.allocPrint(timeline.timelineAllocator, core.DefaultSavePath ++ "/{s}", .{filename});
|
||||||
defer timeline.timelineAllocator.free(ofile);
|
defer timeline.timelineAllocator.free(ofile);
|
||||||
|
|
||||||
|
core.engine_log("1 {s}", .{filename});
|
||||||
|
|
||||||
var obuf = std.ArrayList(u8).init(timeline.timelineAllocator);
|
var obuf = std.ArrayList(u8).init(timeline.timelineAllocator);
|
||||||
defer obuf.deinit();
|
defer obuf.deinit();
|
||||||
var writer = obuf.writer();
|
var writer = obuf.writer();
|
||||||
|
|
@ -116,16 +120,22 @@ pub fn dumpTimeline(filename: []const u8) !void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
core.engine_log("3 {s}", .{filename});
|
||||||
|
|
||||||
try cwd.makePath(core.DefaultSavePath);
|
try cwd.makePath(core.DefaultSavePath);
|
||||||
try cwd.writeFile(.{
|
try cwd.writeFile(.{
|
||||||
.sub_path = ofile,
|
.sub_path = ofile,
|
||||||
.data = obuf.items,
|
.data = obuf.items,
|
||||||
});
|
});
|
||||||
|
core.engine_log("finished writing", .{});
|
||||||
|
} else {
|
||||||
|
core.engine_log("timeline missing", .{});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
core.engine_logs("skipping writing memory timeline as timeline is not enabled");
|
core.engine_logs("skipping writing memory timeline as compactor is not enabled");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
core.engine_logs("skipping writing memory timeline as tracker is not enabled");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -422,6 +422,7 @@ pub const Context = struct {
|
||||||
debugText: std.ArrayList([]u8),
|
debugText: std.ArrayList([]u8),
|
||||||
debugTextCount: u32 = 0,
|
debugTextCount: u32 = 0,
|
||||||
drawDebug: bool = false,
|
drawDebug: bool = false,
|
||||||
|
rootNodes: std.ArrayList(NodeHandle),
|
||||||
|
|
||||||
const debugTextMax = 32;
|
const debugTextMax = 32;
|
||||||
|
|
||||||
|
|
@ -473,6 +474,7 @@ pub const Context = struct {
|
||||||
._horizontalLayout = .{},
|
._horizontalLayout = .{},
|
||||||
.debugText = std.ArrayList([]u8).init(allocator),
|
.debugText = std.ArrayList([]u8).init(allocator),
|
||||||
.mousePick = Layout.init(allocator),
|
.mousePick = Layout.init(allocator),
|
||||||
|
.rootNodes = std.ArrayList(NodeHandle).init(allocator),
|
||||||
};
|
};
|
||||||
|
|
||||||
for (0..debugTextMax) |_| {
|
for (0..debugTextMax) |_| {
|
||||||
|
|
@ -515,6 +517,7 @@ pub const Context = struct {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self.rootNodes.deinit();
|
||||||
|
|
||||||
self.mousePick.deinit();
|
self.mousePick.deinit();
|
||||||
|
|
||||||
|
|
@ -817,16 +820,15 @@ pub const Context = struct {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn assembleDrawOrderList(self: @This(), list: *DrawOrderList) !void {
|
fn assembleDrawOrderList(self: *@This(), list: *DrawOrderList) !void {
|
||||||
var rootNodes = std.ArrayList(NodeHandle).init(self.allocator);
|
self.rootNodes.clearRetainingCapacity();
|
||||||
defer rootNodes.deinit();
|
|
||||||
|
|
||||||
var next: NodeHandle = self.getRead(.{}).child;
|
var next: NodeHandle = self.getRead(.{}).child;
|
||||||
while (next.index != 0) : (next = self.getRead(next).next) {
|
while (next.index != 0) : (next = self.getRead(next).next) {
|
||||||
if (self.getRead(next).state != .Visible) {
|
if (self.getRead(next).state != .Visible) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
try rootNodes.append(next);
|
try self.rootNodes.append(next);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SortFunc = struct {
|
const SortFunc = struct {
|
||||||
|
|
@ -837,12 +839,12 @@ pub const Context = struct {
|
||||||
|
|
||||||
std.sort.insertion(
|
std.sort.insertion(
|
||||||
NodeHandle,
|
NodeHandle,
|
||||||
rootNodes.items,
|
self.rootNodes.items,
|
||||||
self,
|
self.*,
|
||||||
SortFunc.lessThan,
|
SortFunc.lessThan,
|
||||||
);
|
);
|
||||||
|
|
||||||
for (rootNodes.items) |rootNode| {
|
for (self.rootNodes.items) |rootNode| {
|
||||||
try list.append(rootNode);
|
try list.append(rootNode);
|
||||||
try self.assembleDrawOrderListForNode(rootNode, list);
|
try self.assembleDrawOrderListForNode(rootNode, list);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,8 @@ pub const TextRenderer = struct {
|
||||||
if (string.len == 0)
|
if (string.len == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
try self.geo.resetAllLines();
|
||||||
|
|
||||||
var indexList = meshBuffer.mapIndexBufferWriter();
|
var indexList = meshBuffer.mapIndexBufferWriter();
|
||||||
var vertexList = meshBuffer.mapVertexBufferWriter();
|
var vertexList = meshBuffer.mapVertexBufferWriter();
|
||||||
|
|
||||||
|
|
@ -358,14 +360,6 @@ pub const TextRenderer = struct {
|
||||||
) void {
|
) void {
|
||||||
pass.bindGPUVertexBuffers(0, &.{ .buffer = meshBuffer.vertexBuffer, .offset = 0 }, 1);
|
pass.bindGPUVertexBuffers(0, &.{ .buffer = meshBuffer.vertexBuffer, .offset = 0 }, 1);
|
||||||
pass.bindGPUIndexBuffer(&.{ .buffer = meshBuffer.indexBuffer, .offset = 0 }, .indexelementsize32bit);
|
pass.bindGPUIndexBuffer(&.{ .buffer = meshBuffer.indexBuffer, .offset = 0 }, .indexelementsize32bit);
|
||||||
|
|
||||||
// pass.bindGPUFragmentSamplers(0, meshBuffer.fragmentSampler, 1);
|
|
||||||
|
|
||||||
//pass.bindGPUFragmentSamplers(0, &.{
|
|
||||||
//.sampler = rend.context().blockySampler,
|
|
||||||
//.texture = rend.context().defaultTexture.texture,
|
|
||||||
//}, 1);
|
|
||||||
|
|
||||||
_ = self;
|
_ = self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -309,7 +309,7 @@ pub fn LoadTrenchbroomMap(baseAllocator: std.mem.Allocator, settings: Settings)
|
||||||
try tbMap.addPhysicsShape(solid, settings);
|
try tbMap.addPhysicsShape(solid, settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
physics.context().system.update(0.001, .{}) catch {};
|
// physics.context().system.update(0.001, .{}) catch {};
|
||||||
// loop over all point entities look for info_player_start
|
// loop over all point entities look for info_player_start
|
||||||
return tbMap;
|
return tbMap;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,9 @@ pub const ExternGameObject = struct {
|
||||||
self.tbMap = null;
|
self.tbMap = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ig.smallButton("dumpTimeline")) {
|
||||||
|
core.MemoryTracker.dumpTimeline("timeline.txt") catch unreachable;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ig.end();
|
ig.end();
|
||||||
|
|
||||||
|
|
@ -199,38 +202,6 @@ pub const ExternGameObject = struct {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//_ = self;
|
|
||||||
// imgui.utils.structHexView(self);
|
|
||||||
// imgui.utils.structHexView(rctx.activeCamera.?);
|
|
||||||
// if (ig.begin("external game object", null, .{})) {
|
|
||||||
// ig.textf("sup", .{});
|
|
||||||
|
|
||||||
// _ = ig.sliderFloat("skybox strength", &rctx.skyboxSystem.brightnessFactor, 0, 10, null, .{});
|
|
||||||
|
|
||||||
// if (rctx.activeCamera) |camera| {
|
|
||||||
// const forwardVector = camera.forward();
|
|
||||||
// ig.textf("forward vector x:{d} y:{d} z:{d}", .{ forwardVector.x, forwardVector.y, forwardVector.z });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ig.end();
|
|
||||||
|
|
||||||
// if (ig.begin("list of textures", null, .{})) {
|
|
||||||
// var iterator = rctx.textureList.map.iterator();
|
|
||||||
// while (iterator.next()) |i| {
|
|
||||||
// ig.textf("{s}", .{i.value_ptr.*.name.utf8()});
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ig.end();
|
|
||||||
|
|
||||||
// if (ig.begin("list of meshes", null, .{})) {
|
|
||||||
// ig.textf("number of meshes: {d}", .{rctx.meshPool.installedMeshes.count()});
|
|
||||||
// var iterator = rctx.meshPool.installedMeshes.iterator();
|
|
||||||
// while (iterator.next()) |i| {
|
|
||||||
// ig.textf("{s}", .{i.value_ptr.*.name.utf8()});
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// ig.end();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn destroy(self: *@This()) void {
|
pub fn destroy(self: *@This()) void {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue