Added some retarded stuff | Clean it up and fix it | Yes
This commit is contained in:
parent
408adc5623
commit
0eb9a44828
12 changed files with 377 additions and 50 deletions
|
|
@ -13,6 +13,8 @@ const App = @import("app");
|
||||||
//
|
//
|
||||||
|
|
||||||
const template = @import("plugins/template/root.zig");
|
const template = @import("plugins/template/root.zig");
|
||||||
|
const playground = @import("plugins/playground/root.zig");
|
||||||
|
const lua = @import("plugins/lua/root.zig");
|
||||||
const common = @import("plugins/common/root.zig");
|
const common = @import("plugins/common/root.zig");
|
||||||
const platform = @import("plugins/platform/root.zig");
|
const platform = @import("plugins/platform/root.zig");
|
||||||
const device = @import("plugins/device/root.zig");
|
const device = @import("plugins/device/root.zig");
|
||||||
|
|
@ -30,12 +32,14 @@ pub fn main(init: std.process.Init) !void {
|
||||||
|
|
||||||
// --- ADD PLUGINS ---
|
// --- ADD PLUGINS ---
|
||||||
try app.plugins.addMany(&.{
|
try app.plugins.addMany(&.{
|
||||||
|
lua.plugin,
|
||||||
platform.plugin,
|
platform.plugin,
|
||||||
device.plugin,
|
device.plugin,
|
||||||
window.plugin,
|
window.plugin,
|
||||||
cache.plugin,
|
cache.plugin,
|
||||||
input.plugin,
|
input.plugin,
|
||||||
renderer.plugin,
|
renderer.plugin,
|
||||||
|
playground.plugin,
|
||||||
});
|
});
|
||||||
try app.plugins.build(&app);
|
try app.plugins.build(&app);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,11 +23,33 @@ struct Material {
|
||||||
_pad0: vec2f,
|
_pad0: vec2f,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// ----------------------------------------------------
|
||||||
|
struct CameraUniform {
|
||||||
|
view: mat4x4<f32>,
|
||||||
|
projection: mat4x4<f32>,
|
||||||
|
view_projection: mat4x4<f32>,
|
||||||
|
camera_position: vec3<f32>,
|
||||||
|
_pad: f32,
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------
|
||||||
|
// ----------------------------------------------------
|
||||||
|
struct ModelUniform {
|
||||||
|
model: mat4x4<f32>,
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// UNIFORMS
|
// UNIFORMS
|
||||||
//
|
//
|
||||||
|
|
||||||
|
@group(0) @binding(0)
|
||||||
|
var<uniform> camera: CameraUniform;
|
||||||
|
|
||||||
@group(1) @binding(0)
|
@group(1) @binding(0)
|
||||||
|
var<uniform> model: ModelUniform;
|
||||||
|
|
||||||
|
@group(2) @binding(0)
|
||||||
var<uniform> material: Material;
|
var<uniform> material: Material;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
||||||
71
src/plugins/cache/resource/pipeline_cache.zig
vendored
71
src/plugins/cache/resource/pipeline_cache.zig
vendored
|
|
@ -8,17 +8,19 @@ const Self = @This();
|
||||||
|
|
||||||
const Material = @import("../../common/component/material.zig");
|
const Material = @import("../../common/component/material.zig");
|
||||||
const ShaderCache = @import("shader_cache.zig");
|
const ShaderCache = @import("shader_cache.zig");
|
||||||
|
const ShaderID = ShaderCache.ShaderID;
|
||||||
const Vertex = @import("mesh_cache.zig").Vertex;
|
const Vertex = @import("mesh_cache.zig").Vertex;
|
||||||
|
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
pub const GPUPipeline = struct {
|
pub const GPUPipeline = struct {
|
||||||
raw: *wgpu.WGPURenderPipelineImpl,
|
raw: *wgpu.WGPURenderPipelineImpl,
|
||||||
|
layout: *wgpu.WGPUPipelineLayoutImpl,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
pub const GPUMaterial = struct { // TODO: Should prob create Material Cache instead
|
pub const GPUMaterial = struct {
|
||||||
buffer: *wgpu.WGPUBufferImpl,
|
buffer: *wgpu.WGPUBufferImpl,
|
||||||
bind_group: *wgpu.WGPUBindGroupImpl,
|
bind_group: *wgpu.WGPUBindGroupImpl,
|
||||||
};
|
};
|
||||||
|
|
@ -28,7 +30,8 @@ pub const GPUMaterial = struct { // TODO: Should prob create Material Cache inst
|
||||||
//
|
//
|
||||||
|
|
||||||
pipelines: gtl.KeyedSlotMap(Material.Unique, GPUPipeline),
|
pipelines: gtl.KeyedSlotMap(Material.Unique, GPUPipeline),
|
||||||
materials: gtl.SlotMap(GPUMaterial),
|
materials: gtl.SlotMap(Material),
|
||||||
|
materials_gpu: gtl.KeyedSlotMap(gtl.Handle(Material), GPUMaterial),
|
||||||
shader_cache: *ShaderCache,
|
shader_cache: *ShaderCache,
|
||||||
queue: *wgpu.WGPUQueueImpl,
|
queue: *wgpu.WGPUQueueImpl,
|
||||||
device: *wgpu.WGPUDeviceImpl,
|
device: *wgpu.WGPUDeviceImpl,
|
||||||
|
|
@ -45,6 +48,7 @@ pub fn init(
|
||||||
return .{
|
return .{
|
||||||
.pipelines = .init(alloc),
|
.pipelines = .init(alloc),
|
||||||
.materials = .init(alloc),
|
.materials = .init(alloc),
|
||||||
|
.materials_gpu = .init(alloc),
|
||||||
.shader_cache = shader_cache,
|
.shader_cache = shader_cache,
|
||||||
.queue = queue,
|
.queue = queue,
|
||||||
.device = device,
|
.device = device,
|
||||||
|
|
@ -57,28 +61,76 @@ pub fn init(
|
||||||
pub fn deinit(self: *Self) void {
|
pub fn deinit(self: *Self) void {
|
||||||
// --- FREE PIPELINES ---
|
// --- FREE PIPELINES ---
|
||||||
for (self.pipelines.items()) |entry| {
|
for (self.pipelines.items()) |entry| {
|
||||||
|
// wgpu.wgpuPipelineLayoutRelease(entry.value.layout);
|
||||||
wgpu.wgpuRenderPipelineRelease(entry.value.raw);
|
wgpu.wgpuRenderPipelineRelease(entry.value.raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- FREE MATERIALS ---
|
// --- FREE MATERIALS ---
|
||||||
for (self.materials.items()) |gpu| {
|
for (self.materials_gpu.items()) |entry| {
|
||||||
wgpu.wgpuBufferRelease(gpu.buffer);
|
wgpu.wgpuBufferRelease(entry.value.buffer);
|
||||||
wgpu.wgpuBindGroupRelease(gpu.bind_group);
|
wgpu.wgpuBindGroupRelease(entry.value.bind_group);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- # ---
|
// --- # ---
|
||||||
self.pipelines.deinit();
|
self.pipelines.deinit();
|
||||||
self.materials.deinit();
|
self.materials.deinit();
|
||||||
|
self.materials_gpu.deinit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
pub fn getOrCreateMaterial(
|
||||||
|
self: *Self,
|
||||||
|
material: Material,
|
||||||
|
) !*GPUMaterial {
|
||||||
|
return try self.materials.getOrPut(
|
||||||
|
material.unique.shader,
|
||||||
|
blk: {
|
||||||
|
// --- UNIFORM ---
|
||||||
|
const uniform = wgpu.wgpuDeviceCreateBuffer(self.device, &wgpu.WGPUBufferDescriptor{
|
||||||
|
.usage = wgpu.WGPUBufferUsage_CopyDst | wgpu.WGPUBufferUsage_Uniform,
|
||||||
|
.size = @sizeOf(Material.Style),
|
||||||
|
}) orelse return error.Buffer;
|
||||||
|
|
||||||
|
wgpu.wgpuQueueWriteBuffer(
|
||||||
|
self.queue,
|
||||||
|
uniform,
|
||||||
|
0,
|
||||||
|
&material.style,
|
||||||
|
@sizeOf(Material.Style),
|
||||||
|
);
|
||||||
|
|
||||||
|
// --- RESULT ---
|
||||||
|
break :blk .{
|
||||||
|
.bind_group = undefined,
|
||||||
|
.buffer = uniform,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
pub fn getOrCreate(
|
pub fn getOrCreate(
|
||||||
self: *Self,
|
self: *Self,
|
||||||
key: Material.Unique,
|
key: Material,
|
||||||
) !*GPUPipeline {
|
) !*GPUPipeline {
|
||||||
return try self.pipelines.getOrPut(key, .{
|
return try self.pipelines.getOrPut(key.unique, blk: {
|
||||||
.raw = try self.createPipeline(key),
|
// const layout = wgpu.wgpuDeviceCreatePipelineLayout(
|
||||||
|
// self.device,
|
||||||
|
// &wgpu.WGPUPipelineLayoutDescriptor{
|
||||||
|
// .bindGroupLayoutCount = 1,
|
||||||
|
// .bindGroupLayouts = &wgpu.WGPUBindGroupLayoutDescriptor{
|
||||||
|
// .entryCount = 1,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// ) orelse return error.Layout;
|
||||||
|
|
||||||
|
// --- RESULT ---
|
||||||
|
break :blk .{
|
||||||
|
.raw = try self.createPipeline(key.unique, undefined),
|
||||||
|
.layout = undefined,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -87,7 +139,10 @@ pub fn getOrCreate(
|
||||||
fn createPipeline(
|
fn createPipeline(
|
||||||
self: *Self,
|
self: *Self,
|
||||||
key: Material.Unique,
|
key: Material.Unique,
|
||||||
|
layout: *wgpu.WGPUPipelineLayoutImpl,
|
||||||
) !*wgpu.WGPURenderPipelineImpl {
|
) !*wgpu.WGPURenderPipelineImpl {
|
||||||
|
_ = layout;
|
||||||
|
|
||||||
// --- ENSURE SHADER MODULE ---
|
// --- ENSURE SHADER MODULE ---
|
||||||
const shader_module = try self.shader_cache.getOrCreate(
|
const shader_module = try self.shader_cache.getOrCreate(
|
||||||
key.shader,
|
key.shader,
|
||||||
|
|
|
||||||
4
src/plugins/cache/system/lifetime.zig
vendored
4
src/plugins/cache/system/lifetime.zig
vendored
|
|
@ -46,8 +46,8 @@ pub fn init(app: *App) !void {
|
||||||
_ = try pipelines.getOrCreate(.{});
|
_ = try pipelines.getOrCreate(.{});
|
||||||
_ = try pipelines.getOrCreate(.{});
|
_ = try pipelines.getOrCreate(.{});
|
||||||
|
|
||||||
_ = try pipelines.getOrCreate(.{ .shader = .unlit });
|
_ = try pipelines.getOrCreate(.{ .unique = .{ .shader = .unlit } });
|
||||||
_ = try pipelines.getOrCreate(.{ .shader = .unlit });
|
_ = try pipelines.getOrCreate(.{ .unique = .{ .shader = .unlit } });
|
||||||
|
|
||||||
{ // DEBUG
|
{ // DEBUG
|
||||||
std.debug.print("{s}┏━{s} PIPELINES\n", .{ gtl.ansi.blue, gtl.ansi.reset });
|
std.debug.print("{s}┏━{s} PIPELINES\n", .{ gtl.ansi.blue, gtl.ansi.reset });
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
const gtl = @import("gtl");
|
const gtl = @import("gtl");
|
||||||
const ShaderID = @import("../../cache/resource/shader_cache.zig").ShaderID;
|
const ShaderID = @import("../../cache/resource/shader_cache.zig").ShaderID;
|
||||||
const Handle = gtl.Handle;
|
const Handle = gtl.Handle;
|
||||||
|
const Self = @This();
|
||||||
|
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
|
|
@ -50,3 +51,4 @@ pub const Unique = struct {
|
||||||
|
|
||||||
style: Style = .{},
|
style: Style = .{},
|
||||||
unique: Unique = .{},
|
unique: Unique = .{},
|
||||||
|
value: ?Handle(Self) = null,
|
||||||
|
|
|
||||||
97
src/plugins/lua/root.zig
Normal file
97
src/plugins/lua/root.zig
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
//! ----------------------------------------------------
|
||||||
|
//! ----------------------------------------------------
|
||||||
|
|
||||||
|
//
|
||||||
|
// PRIVATE
|
||||||
|
//
|
||||||
|
|
||||||
|
const App = @import("app");
|
||||||
|
const Zla = @import("zla");
|
||||||
|
|
||||||
|
//
|
||||||
|
// PUBLIC
|
||||||
|
//
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
pub const plugin: App.plugin.Plugin = .{
|
||||||
|
.name = "LUA",
|
||||||
|
.build = build,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
pub fn build(
|
||||||
|
_: *App.plugin.Plugin,
|
||||||
|
app: *App,
|
||||||
|
) !void {
|
||||||
|
// --- LIFETIME ---
|
||||||
|
try app.schedules.addMany(App.stage.init, &.{init});
|
||||||
|
try app.schedules.addMany(App.stage.deinit, &.{ deinit, lua_deinit });
|
||||||
|
|
||||||
|
// --- EXEC ---
|
||||||
|
try app.schedules.addManyAfter(App.stage.init, App.stage.init, &.{lua_init});
|
||||||
|
|
||||||
|
// --- FRAME ---
|
||||||
|
try app.schedules.add(App.stage.inputs, lua_inputs);
|
||||||
|
try app.schedules.add(App.stage.update, lua_update);
|
||||||
|
try app.schedules.add(App.stage.draw, lua_draw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn init(app: *App) !void {
|
||||||
|
// --- ZLA ---
|
||||||
|
_ = try app.resources.getOrSet(
|
||||||
|
try Zla.init(app.alloc),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn deinit(app: *App) !void {
|
||||||
|
// --- # ---
|
||||||
|
const res = try app.resources.getMany(struct {
|
||||||
|
zla: *Zla,
|
||||||
|
});
|
||||||
|
|
||||||
|
// --- # ---
|
||||||
|
res.zla.deinit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn lua_init(app: *App) !void {
|
||||||
|
const res = try app.resources.getMany(struct { zla: *Zla });
|
||||||
|
|
||||||
|
try res.zla.execFromFile(void, "src/scripts/main.lua");
|
||||||
|
try res.zla.call(void, "init", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn lua_deinit(app: *App) !void {
|
||||||
|
const res = try app.resources.getMany(struct { zla: *Zla });
|
||||||
|
try res.zla.call(void, "deinit", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn lua_inputs(app: *App) !void {
|
||||||
|
const res = try app.resources.getMany(struct { zla: *Zla });
|
||||||
|
try res.zla.call(void, "inputs", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn lua_update(app: *App) !void {
|
||||||
|
const res = try app.resources.getMany(struct { zla: *Zla });
|
||||||
|
try res.zla.call(void, "update", .{});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn lua_draw(app: *App) !void {
|
||||||
|
const res = try app.resources.getMany(struct { zla: *Zla });
|
||||||
|
try res.zla.call(void, "draw", .{});
|
||||||
|
}
|
||||||
53
src/plugins/playground/root.zig
Normal file
53
src/plugins/playground/root.zig
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
//! ----------------------------------------------------
|
||||||
|
//! ----------------------------------------------------
|
||||||
|
|
||||||
|
//
|
||||||
|
// PRIVATE
|
||||||
|
//
|
||||||
|
|
||||||
|
const App = @import("app");
|
||||||
|
const Mesh = @import("../common/component/mesh.zig");
|
||||||
|
const Material = @import("../common/component/material.zig");
|
||||||
|
const Transform3D = @import("../common/component/transform3D.zig");
|
||||||
|
|
||||||
|
const PipelineCache = @import("../cache/resource/pipeline_cache.zig");
|
||||||
|
|
||||||
|
//
|
||||||
|
// PUBLIC
|
||||||
|
//
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
pub const plugin: App.plugin.Plugin = .{
|
||||||
|
.name = "Playground",
|
||||||
|
.build = build,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn build(
|
||||||
|
_: *App.plugin.Plugin,
|
||||||
|
app: *App,
|
||||||
|
) !void {
|
||||||
|
try app.schedules.add(App.stage.init, start);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
fn start(app: *App) !void {
|
||||||
|
// --- # ---
|
||||||
|
const pipeline_cache = app.resources.getPtr(
|
||||||
|
PipelineCache,
|
||||||
|
) orelse return error.PipelineCacheNotSet;
|
||||||
|
|
||||||
|
// --- # ---
|
||||||
|
try app.world.spawn(.{
|
||||||
|
Mesh{ .value = .square },
|
||||||
|
Material{
|
||||||
|
.style = .{},
|
||||||
|
.unique = .{},
|
||||||
|
.value = try pipeline_cache.materials.put(.{}),
|
||||||
|
},
|
||||||
|
Transform3D{},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
@ -16,12 +16,12 @@ const Camera = struct {};
|
||||||
pub const DrawCMD = union(enum) {
|
pub const DrawCMD = union(enum) {
|
||||||
draw: struct {
|
draw: struct {
|
||||||
mesh: Mesh,
|
mesh: Mesh,
|
||||||
material: Material.Unique,
|
material: Material,
|
||||||
},
|
},
|
||||||
|
|
||||||
draw_indexed: struct {
|
draw_indexed: struct {
|
||||||
mesh: Mesh,
|
mesh: Mesh,
|
||||||
material: Material.Unique,
|
material: Material,
|
||||||
},
|
},
|
||||||
|
|
||||||
begin_pass: struct {
|
begin_pass: struct {
|
||||||
|
|
@ -79,3 +79,33 @@ pub fn draw(
|
||||||
cmd,
|
cmd,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// TESTING
|
||||||
|
//
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
pub fn beginPass(self: *Self) void {
|
||||||
|
self.draw(.{ .begin_pass = .{
|
||||||
|
.camera = undefined,
|
||||||
|
} }) catch unreachable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
pub fn endPass(self: *Self) void {
|
||||||
|
self.draw(.end_pass) catch unreachable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
pub fn drawTriangle(self: *Self) void {
|
||||||
|
self.draw(.{ .draw = .{ .material = .{}, .mesh = .triangle } }) catch unreachable;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
/// ----------------------------------------------------
|
||||||
|
pub fn drawSquare(self: *Self) void {
|
||||||
|
self.draw(.{ .draw = .{ .material = .{}, .mesh = .square } }) catch unreachable;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,43 +15,47 @@ pub fn begin(app: *App) !void {
|
||||||
// --- # ---
|
// --- # ---
|
||||||
res.renderer.clear();
|
res.renderer.clear();
|
||||||
|
|
||||||
{ // TEST
|
// { // TEST
|
||||||
// --- DRAW ---
|
// // --- DRAW ---
|
||||||
try res.renderer.draw(.{
|
// try res.renderer.draw(.{
|
||||||
.begin_pass = .{
|
// .begin_pass = .{
|
||||||
.camera = undefined,
|
// .camera = undefined,
|
||||||
.color = .{ 0.001, 0.001, 0.001, 1.0 },
|
// .color = .{ 0.001, 0.001, 0.001, 1.0 },
|
||||||
},
|
// },
|
||||||
});
|
// });
|
||||||
defer res.renderer.draw(.end_pass) catch unreachable;
|
// defer res.renderer.draw(.end_pass) catch unreachable;
|
||||||
|
//
|
||||||
// --- # ---
|
// // --- # ---
|
||||||
try res.renderer.draw(.{
|
// try res.renderer.draw(.{
|
||||||
.draw = .{
|
// .draw = .{
|
||||||
.mesh = .square,
|
// .mesh = .square,
|
||||||
.material = .{},
|
// .material = .{
|
||||||
},
|
// .style = .{
|
||||||
});
|
// .albedo = .{ 0.2, 0.8, 0.2, 1.0 },
|
||||||
}
|
// },
|
||||||
|
// },
|
||||||
{ // TEST
|
// },
|
||||||
// --- DRAW ---
|
// });
|
||||||
try res.renderer.draw(.{
|
// }
|
||||||
.begin_pass = .{
|
//
|
||||||
.camera = undefined,
|
// { // TEST
|
||||||
.load_op = .load,
|
// // --- DRAW ---
|
||||||
},
|
// try res.renderer.draw(.{
|
||||||
});
|
// .begin_pass = .{
|
||||||
defer res.renderer.draw(.end_pass) catch unreachable;
|
// .camera = undefined,
|
||||||
|
// .load_op = .load,
|
||||||
// --- # ---
|
// },
|
||||||
try res.renderer.draw(.{
|
// });
|
||||||
.draw = .{
|
// defer res.renderer.draw(.end_pass) catch unreachable;
|
||||||
.mesh = .triangle,
|
//
|
||||||
.material = .{},
|
// // --- # ---
|
||||||
},
|
// try res.renderer.draw(.{
|
||||||
});
|
// .draw = .{
|
||||||
}
|
// .mesh = .triangle,
|
||||||
|
// .material = .{},
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,29 @@
|
||||||
//! ----------------------------------------------------
|
//! ----------------------------------------------------
|
||||||
|
|
||||||
const App = @import("app");
|
const App = @import("app");
|
||||||
|
const Zla = @import("zla");
|
||||||
const Renderer = @import("../resource/renderer.zig");
|
const Renderer = @import("../resource/renderer.zig");
|
||||||
|
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
pub fn init(app: *App) !void {
|
pub fn init(app: *App) !void {
|
||||||
try app.resources.set(Renderer.init(
|
// --- # ---
|
||||||
|
const zla = app.resources.getPtr(Zla) orelse return error.ZlaNotSet;
|
||||||
|
|
||||||
|
// --- # ---
|
||||||
|
const renderer = try app.resources.getOrSet(Renderer.init(
|
||||||
app.alloc,
|
app.alloc,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
// --- REGISTER ---
|
||||||
|
zla.registerMethods(Renderer, &.{
|
||||||
|
.{ .name = "beginPass", .func = Renderer.beginPass },
|
||||||
|
.{ .name = "endPass", .func = Renderer.endPass },
|
||||||
|
.{ .name = "drawTriangle", .func = Renderer.drawTriangle },
|
||||||
|
.{ .name = "drawSquare", .func = Renderer.drawSquare },
|
||||||
|
});
|
||||||
|
zla.pushUserdata(renderer);
|
||||||
|
zla.setGlobal("ren");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// ----------------------------------------------------
|
/// ----------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,10 @@ pub fn draw(app: *App) !void {
|
||||||
mesh_cache: *MeshCache,
|
mesh_cache: *MeshCache,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
{ // TODO: Move this | Gather Materials
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// --- DO NONE ON WINDOW RESIZE ---
|
// --- DO NONE ON WINDOW RESIZE ---
|
||||||
if (app.events.consume(Resized)) |_| {
|
if (app.events.consume(Resized)) |_| {
|
||||||
return;
|
return;
|
||||||
|
|
@ -118,8 +122,11 @@ pub fn draw(app: *App) !void {
|
||||||
.draw => |v| {
|
.draw => |v| {
|
||||||
// --- ENSURE ---
|
// --- ENSURE ---
|
||||||
const pipeline = try res.pipeline_cache.getOrCreate(v.material);
|
const pipeline = try res.pipeline_cache.getOrCreate(v.material);
|
||||||
|
// const material = try res.pipeline_cache.getOrCreateMaterial(v.material);
|
||||||
const mesh = try res.mesh_cache.getOrCreate(v.mesh);
|
const mesh = try res.mesh_cache.getOrCreate(v.mesh);
|
||||||
|
|
||||||
|
// _ = material;
|
||||||
|
|
||||||
// --- BIND ---
|
// --- BIND ---
|
||||||
wgpu.wgpuRenderPassEncoderSetPipeline(render_pass, pipeline.raw);
|
wgpu.wgpuRenderPassEncoderSetPipeline(render_pass, pipeline.raw);
|
||||||
wgpu.wgpuRenderPassEncoderSetVertexBuffer(render_pass, 0, mesh.vbuf, 0, wgpu.wgpuBufferGetSize(mesh.vbuf));
|
wgpu.wgpuRenderPassEncoderSetVertexBuffer(render_pass, 0, mesh.vbuf, 0, wgpu.wgpuBufferGetSize(mesh.vbuf));
|
||||||
|
|
|
||||||
38
src/scripts/main.lua
Normal file
38
src/scripts/main.lua
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
---@diagnostic disable: lowercase-global
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
-------------------------------------------------------
|
||||||
|
function init()
|
||||||
|
print("\x1b[32m[LUA]\x1b[0m init")
|
||||||
|
|
||||||
|
-- world:spawn {
|
||||||
|
-- Player {}
|
||||||
|
-- Transform {}
|
||||||
|
-- }
|
||||||
|
end
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
-------------------------------------------------------
|
||||||
|
function deinit()
|
||||||
|
print("\x1b[32m[LUA]\x1b[0m deinit")
|
||||||
|
end
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
-------------------------------------------------------
|
||||||
|
function inputs()
|
||||||
|
-- print("\x1b[32m[LUA]\x1b[0m inputs")
|
||||||
|
end
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
-------------------------------------------------------
|
||||||
|
function update()
|
||||||
|
end
|
||||||
|
|
||||||
|
-------------------------------------------------------
|
||||||
|
-------------------------------------------------------
|
||||||
|
function draw()
|
||||||
|
ren:beginPass()
|
||||||
|
ren:drawSquare()
|
||||||
|
ren:drawTriangle()
|
||||||
|
ren:endPass()
|
||||||
|
end
|
||||||
Loading…
Add table
Reference in a new issue