fixed all memory leaks with GPA
This commit is contained in:
parent
943a325ec0
commit
4e93940c12
|
|
@ -31,6 +31,7 @@ pub const LogBuffer = struct {
|
||||||
|
|
||||||
pub fn deinit(self: *@This()) void {
|
pub fn deinit(self: *@This()) void {
|
||||||
self.lock.lock();
|
self.lock.lock();
|
||||||
|
self.lock.unlock();
|
||||||
self.buffer.deinit();
|
self.buffer.deinit();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -266,13 +267,13 @@ pub const LoggerSys = struct {
|
||||||
pub fn print(self: *@This(), comptime fmt: []const u8, args: anytype) !void {
|
pub fn print(self: *@This(), comptime fmt: []const u8, args: anytype) !void {
|
||||||
self.lock.lock();
|
self.lock.lock();
|
||||||
try self.writeOutBuffer.writer().print(fmt, args);
|
try self.writeOutBuffer.writer().print(fmt, args);
|
||||||
if (self.sessionBuffer != null) {
|
|
||||||
try self.sessionBuffer.?.lockWriter().print(fmt, args);
|
|
||||||
self.sessionBuffer.?.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
self.lock.unlock();
|
self.lock.unlock();
|
||||||
|
|
||||||
|
if (self.sessionBuffer != null) {
|
||||||
|
// self.sessionBuffer.?.lockWriter().print(fmt, args) catch {};
|
||||||
|
// self.sessionBuffer.?.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
if (self.writeOutBuffer.items.len > LogBufferSize) {
|
if (self.writeOutBuffer.items.len > LogBufferSize) {
|
||||||
if (self.flushBuffer.items.len == 0) {
|
if (self.flushBuffer.items.len == 0) {
|
||||||
try self.flush();
|
try self.flush();
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,10 @@ pub fn optimizeBroadPhase() void {
|
||||||
|
|
||||||
pub const context = core.EngineObject(runtime.PhysicsRuntime).get;
|
pub const context = core.EngineObject(runtime.PhysicsRuntime).get;
|
||||||
|
|
||||||
|
pub fn removeShape(name: *core.Name) void {
|
||||||
|
context().removeShape(name);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn addShape(name: []const u8, settings: ShapeSettings) !void {
|
pub fn addShape(name: []const u8, settings: ShapeSettings) !void {
|
||||||
var n = core.MakeName(name);
|
var n = core.MakeName(name);
|
||||||
try context().createShape(&n, settings);
|
try context().createShape(&n, settings);
|
||||||
|
|
@ -85,7 +89,6 @@ pub fn start_module(spec: *core.SpecVariantMap, args: anytype, allocator: std.me
|
||||||
|
|
||||||
core.engine_logs("starting physics");
|
core.engine_logs("starting physics");
|
||||||
try core.defineComponentList(ComponentList, allocator);
|
try core.defineComponentList(ComponentList, allocator);
|
||||||
try zphysics.init(allocator, .{});
|
|
||||||
_ = try core.createObject(runtime.PhysicsRuntime, .{ .can_tick = true });
|
_ = try core.createObject(runtime.PhysicsRuntime, .{ .can_tick = true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -96,7 +99,7 @@ pub fn setupFromModule() void {
|
||||||
pub fn shutdown_module(allocator: std.mem.Allocator) void {
|
pub fn shutdown_module(allocator: std.mem.Allocator) void {
|
||||||
core.undefineComponentList(ComponentList);
|
core.undefineComponentList(ComponentList);
|
||||||
_ = allocator;
|
_ = allocator;
|
||||||
zphysics.deinit();
|
// core.getEngineObject(runtime.PhysicsRuntime).?.system.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const Module: core.ModuleDescription = .{
|
pub const Module: core.ModuleDescription = .{
|
||||||
|
|
|
||||||
|
|
@ -154,6 +154,7 @@ pub const PhysicsRuntime = struct {
|
||||||
|
|
||||||
pub fn init(allocator: std.mem.Allocator) !*@This() {
|
pub fn init(allocator: std.mem.Allocator) !*@This() {
|
||||||
const self = try allocator.create(@This());
|
const self = try allocator.create(@This());
|
||||||
|
try zphysics.init(std.heap.c_allocator, .{});
|
||||||
|
|
||||||
self.* = .{
|
self.* = .{
|
||||||
.allocator = allocator,
|
.allocator = allocator,
|
||||||
|
|
@ -232,22 +233,43 @@ pub const PhysicsRuntime = struct {
|
||||||
self.bodyIdsToDestroy.append(self.allocator, bodyId) catch unreachable;
|
self.bodyIdsToDestroy.append(self.allocator, bodyId) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn removeShape(self: *@This(), name: *core.Name) void {
|
||||||
|
self.shapes.get(name.handle()).?.shape.release();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn deinit(self: *@This()) void {
|
pub fn deinit(self: *@This()) void {
|
||||||
const allocator = self.allocator;
|
const allocator = self.allocator;
|
||||||
|
|
||||||
for (PhysicsCharacter.BaseContainer.list.items) |physChar| {
|
for (PhysicsCharacter.BaseContainer.list.items) |physChar| {
|
||||||
physChar.deinit();
|
physChar.deinit();
|
||||||
}
|
}
|
||||||
var iterator = self.shapes.iterator();
|
{
|
||||||
while (iterator.next()) |n| {
|
// var iterator = self.shapes.iterator();
|
||||||
n.value_ptr.shape.release();
|
// while (iterator.next()) |n| {
|
||||||
|
// n.value_ptr.shape.release();
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const interface = self.system.getBodyInterfaceMut();
|
||||||
|
|
||||||
|
var iterator = self.idToEntity.keyIterator();
|
||||||
|
while (iterator.next()) |bodyId| {
|
||||||
|
interface.removeAndDestroyBody(bodyId.*);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.bodyIdsToDestroy.deinit(self.allocator);
|
||||||
|
self.system.update(0.01, .{}) catch {};
|
||||||
|
|
||||||
self.idToEntity.deinit(self.allocator);
|
self.idToEntity.deinit(self.allocator);
|
||||||
// core.undefineComponent(PhysicsCharacter);
|
// core.undefineComponent(PhysicsCharacter);
|
||||||
// core.undefineComponent(PhysicsCollider);
|
// core.undefineComponent(PhysicsCollider);
|
||||||
self.shapes.deinit(self.allocator);
|
self.shapes.deinit(self.allocator);
|
||||||
self.system.destroy();
|
self.system.destroy();
|
||||||
|
|
||||||
|
zphysics.deinit();
|
||||||
|
|
||||||
allocator.destroy(self);
|
allocator.destroy(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -195,6 +195,11 @@ pub const PlatformInstance = struct {
|
||||||
sdl3.getMouseState(&self.cursorPos.x, &self.cursorPos.y);
|
sdl3.getMouseState(&self.cursorPos.x, &self.cursorPos.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (event.type == sdl3.events.window_resized) {
|
||||||
|
self.extent.x = @floatFromInt(event.window.data1);
|
||||||
|
self.extent.y = @floatFromInt(event.window.data2);
|
||||||
|
}
|
||||||
|
|
||||||
for (self.processFuncs.items) |func| {
|
for (self.processFuncs.items) |func| {
|
||||||
func(@ptrCast(event));
|
func(@ptrCast(event));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -78,8 +78,6 @@ pub const MeshPool = struct {
|
||||||
self.meshUpdates.lock();
|
self.meshUpdates.lock();
|
||||||
defer self.meshUpdates.unlock();
|
defer self.meshUpdates.unlock();
|
||||||
|
|
||||||
self.destroyList = std.ArrayList(*gpu.GPUTransferBuffer).init(self.allocator);
|
|
||||||
|
|
||||||
while (self.meshUpdates.popFromUnlocked()) |u| {
|
while (self.meshUpdates.popFromUnlocked()) |u| {
|
||||||
switch (u) {
|
switch (u) {
|
||||||
.new => |new| {
|
.new => |new| {
|
||||||
|
|
@ -162,6 +160,7 @@ pub const MeshPool = struct {
|
||||||
|
|
||||||
pub fn destroy(p: *anyopaque) void {
|
pub fn destroy(p: *anyopaque) void {
|
||||||
const self: *@This() = @ptrCast(@alignCast(p));
|
const self: *@This() = @ptrCast(@alignCast(p));
|
||||||
|
core.engine_logs("mesh pool destroyed");
|
||||||
self.clearInvalidations();
|
self.clearInvalidations();
|
||||||
self.invalidations.deinit(self.allocator);
|
self.invalidations.deinit(self.allocator);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ pub fn setup(self: *@This()) !void {
|
||||||
|
|
||||||
pub fn destroy(self: *@This()) void {
|
pub fn destroy(self: *@This()) void {
|
||||||
self.screenContext.destroy();
|
self.screenContext.destroy();
|
||||||
|
self.stringArena.deinit();
|
||||||
self.runtime.destroy();
|
self.runtime.destroy();
|
||||||
self.drawList.deinit();
|
self.drawList.deinit();
|
||||||
self.allocator.destroy(self);
|
self.allocator.destroy(self);
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ pub const ColliderSpec = struct {
|
||||||
|
|
||||||
pub const TBMap = struct {
|
pub const TBMap = struct {
|
||||||
root: core.Entity,
|
root: core.Entity,
|
||||||
|
shapes: std.ArrayListUnmanaged(core.Name) = .{},
|
||||||
meshes: std.ArrayListUnmanaged(core.Entity) = .{}, // each material has its own entity
|
meshes: std.ArrayListUnmanaged(core.Entity) = .{}, // each material has its own entity
|
||||||
colliders: std.ArrayListUnmanaged(core.Entity) = .{}, // each solid in worldspawn has it's own convex collider
|
colliders: std.ArrayListUnmanaged(core.Entity) = .{}, // each solid in worldspawn has it's own convex collider
|
||||||
colliderSpecs: std.ArrayListUnmanaged(ColliderSpec) = .{},
|
colliderSpecs: std.ArrayListUnmanaged(ColliderSpec) = .{},
|
||||||
|
|
@ -94,6 +95,7 @@ pub const TBMap = struct {
|
||||||
const shapeName = try std.fmt.bufPrint(&nameBuffer, "t_map/worldspawn_shape_{d}", .{self.colliderSpecs.items.len});
|
const shapeName = try std.fmt.bufPrint(&nameBuffer, "t_map/worldspawn_shape_{d}", .{self.colliderSpecs.items.len});
|
||||||
|
|
||||||
try physics.addShape(shapeName, .{ .convexHull = settings });
|
try physics.addShape(shapeName, .{ .convexHull = settings });
|
||||||
|
try self.shapes.append(self.allocator, core.MakeName(shapeName));
|
||||||
|
|
||||||
try self.colliderSpecs.append(self.allocator, .{
|
try self.colliderSpecs.append(self.allocator, .{
|
||||||
.name = core.MakeName(shapeName),
|
.name = core.MakeName(shapeName),
|
||||||
|
|
@ -132,6 +134,11 @@ pub const TBMap = struct {
|
||||||
}
|
}
|
||||||
self.colliderSpecs.deinit(self.allocator);
|
self.colliderSpecs.deinit(self.allocator);
|
||||||
|
|
||||||
|
for (self.shapes.items) |*shapeName| {
|
||||||
|
physics.removeShape(shapeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.shapes.deinit(self.allocator);
|
||||||
self.root.destroy();
|
self.root.destroy();
|
||||||
|
|
||||||
self.allocator.destroy(self);
|
self.allocator.destroy(self);
|
||||||
|
|
|
||||||
|
|
@ -50,8 +50,13 @@ BodyManager::~BodyManager()
|
||||||
|
|
||||||
// Destroy any bodies that are still alive
|
// Destroy any bodies that are still alive
|
||||||
for (Body *b : mBodies)
|
for (Body *b : mBodies)
|
||||||
|
{
|
||||||
if (sIsValidBodyPointer(b))
|
if (sIsValidBodyPointer(b))
|
||||||
|
{
|
||||||
sDeleteBody(b);
|
sDeleteBody(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
delete [] mActiveBodies;
|
delete [] mActiveBodies;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,9 @@ pub const ExternGameObject = struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn destroy(self: *@This()) void {
|
pub fn destroy(self: *@This()) void {
|
||||||
|
if (self.tbMap) |map| {
|
||||||
|
map.destroy();
|
||||||
|
}
|
||||||
self.consoleWindow.deinit();
|
self.consoleWindow.deinit();
|
||||||
self.physicsObjectsWindow.destroy();
|
self.physicsObjectsWindow.destroy();
|
||||||
self.allocator.destroy(Slack.fromPtr(self));
|
self.allocator.destroy(Slack.fromPtr(self));
|
||||||
|
|
|
||||||
|
|
@ -415,6 +415,7 @@ pub fn deinit(self: *@This()) void {
|
||||||
// self.rendererDebugger.destroy();
|
// self.rendererDebugger.destroy();
|
||||||
DoomPlayer.DoomCanvas.cleanupDoom();
|
DoomPlayer.DoomCanvas.cleanupDoom();
|
||||||
self.fpcamera.destroy();
|
self.fpcamera.destroy();
|
||||||
|
self.engineTool.destroy();
|
||||||
|
|
||||||
// self.objectSpawner.destroy();
|
// self.objectSpawner.destroy();
|
||||||
// self.videoplayer.destroy();
|
// self.videoplayer.destroy();
|
||||||
|
|
@ -423,6 +424,7 @@ pub fn deinit(self: *@This()) void {
|
||||||
|
|
||||||
pub fn main() anyerror!void {
|
pub fn main() anyerror!void {
|
||||||
var spec = try backlog.getSpec("sampleGame");
|
var spec = try backlog.getSpec("sampleGame");
|
||||||
|
// try spec.put("useGPA", .{ .boolean = false });
|
||||||
_ = backlog.startEngine(&NeonObjectTable, &spec);
|
_ = backlog.startEngine(&NeonObjectTable, &spec);
|
||||||
|
|
||||||
// try backlog.initializeAndRunStandardProgram(@This(), .{
|
// try backlog.initializeAndRunStandardProgram(@This(), .{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue