197 lines
7.0 KiB
Zig
197 lines
7.0 KiB
Zig
const core = @import("core");
|
|
const assets = @import("assets");
|
|
const std = @import("std");
|
|
const memory = core.MemoryTracker;
|
|
pub const ozz = @import("ozz");
|
|
const texture_cooking = @import("cooking/texture_cooking.zig");
|
|
const mesh_cooking = @import("cooking/mesh_cooking.zig");
|
|
pub const vk_renderer = @import("vk_renderer.zig");
|
|
const materials = @import("materials.zig");
|
|
|
|
pub usingnamespace @import("debug_draws.zig");
|
|
pub const gpu_pipe_data = @import("gpu_pipe_data.zig");
|
|
pub const BoneHandle = animation_system.BoneHandle;
|
|
|
|
pub const SkyboxSystem = @import("skybox.zig");
|
|
pub const setSkybox = SkyboxSystem.setSkybox;
|
|
|
|
pub const animation_system = @import("animation/animationSystem.zig");
|
|
pub const AnimationSystem = animation_system.AnimationSystem;
|
|
pub const Animator = animation_system.Animator;
|
|
pub const AnimationTrack = animation_system.AnimationTrack;
|
|
pub const Skeleton = animation_system.Skeleton;
|
|
|
|
pub const animation_resolver = @import("animation/animResolver.zig");
|
|
pub const AnimResolverRef = animation_resolver.AnimResolverRef;
|
|
pub const AnimResolverInterface = animation_resolver.AnimResolverInterface;
|
|
pub const SingleAnimationResolver = animation_resolver.SingleAnimationResolver;
|
|
pub const BlenderList = animation_resolver.BlenderList;
|
|
pub const AnimSampler = animation_resolver.AnimSampler;
|
|
|
|
const vk_cubemap = @import("vk_renderer/vk_cubemap.zig");
|
|
pub const CubeMapDirs = vk_cubemap.CubeMapDirs;
|
|
pub const MakeCubeMapList = vk_cubemap.MakeCubeMapList;
|
|
|
|
pub const animation_loaders = @import("animation/loaders.zig");
|
|
|
|
pub const RenderThread = @import("vk_renderer/RenderThread.zig");
|
|
pub const vkinit = @import("vk_init.zig");
|
|
pub const vk_allocator = @import("vk_allocator.zig");
|
|
pub const NeonVkAllocator = vk_allocator.NeonVkAllocator;
|
|
pub const NeonVkPipelineBuilder = vk_renderer.NeonVkPipelineBuilder;
|
|
pub const NeonVkContext = vk_renderer.NeonVkContext;
|
|
pub const constants = @import("vk_constants.zig");
|
|
pub const NeonVkImage = vk_renderer.NeonVkImage;
|
|
pub const Material = materials.Material;
|
|
pub const RendererInterfaceRef = vk_renderer.RendererInterfaceRef;
|
|
pub const RendererInterface = vk_renderer.RendererInterface;
|
|
pub const texture = @import("texture.zig");
|
|
pub const debug_draw = @import("debug_draws.zig");
|
|
pub const mesh = @import("mesh.zig");
|
|
pub const Mesh = mesh.Mesh;
|
|
pub const DynamicMesh = mesh.DynamicMesh;
|
|
pub const IndexBuffer = mesh.IndexBuffer;
|
|
pub const Texture = texture.Texture;
|
|
pub const MeshVertex = mesh.MeshVertex;
|
|
|
|
pub const mesh_pool = @import("vk_renderer/vk_mesh_pool.zig");
|
|
pub const MeshSourceType = mesh_pool.MeshSourceType;
|
|
pub const loadIndexedMeshForPooling = mesh_pool.loadIndexedMeshForPooling;
|
|
pub const getMeshPoolBuffers = mesh_pool.getMeshPoolBuffers;
|
|
pub const getIndexedMeshByName = mesh_pool.getIndexedMeshByName;
|
|
|
|
// pub const DynamicTexture = @import("dynamic_texture/DynamicTexture.zig");
|
|
|
|
pub const vk_util = @import("vk_utils.zig");
|
|
pub const createAndInstallTextureFromPixels = vk_util.createAndInstallTextureFromPixels;
|
|
|
|
const vk_api = @import("../vk_api.zig");
|
|
pub const vkd = &vk_api.vkd;
|
|
pub const vki = &vk_api.vki;
|
|
pub const vkb = &vk_api.vkb;
|
|
|
|
pub const PixelBufferRGBA8 = @import("PixelBufferRGBA8.zig");
|
|
|
|
pub const vk_assetLoaders = @import("vk_assetLoaders.zig");
|
|
|
|
pub const PixelPos = vk_renderer.PixelPos;
|
|
|
|
pub const NeonVkBuffer = vk_renderer.NeonVkBuffer;
|
|
|
|
pub const NumFrames = constants.NUM_FRAMES;
|
|
|
|
const engine_logs = core.engine_logs;
|
|
const engine_log = core.engine_log;
|
|
|
|
pub fn getContext() *NeonVkContext {
|
|
return vk_renderer.gContext;
|
|
}
|
|
|
|
pub usingnamespace @import("vk_renderer/vk_renderer_types.zig");
|
|
|
|
pub const render_objects = @import("render_objects.zig");
|
|
pub const Camera = render_objects.Camera;
|
|
pub const StaticMesh = render_objects.StaticMesh;
|
|
pub const IndexedMesh = mesh_pool.IndexedMesh;
|
|
|
|
pub fn registerRendererPlugin(value: anytype) !void {
|
|
const ref = RendererInterfaceRef{
|
|
.ptr = value,
|
|
.vtable = &@TypeOf(value.*).RendererInterfaceVTable,
|
|
};
|
|
var gc = getContext();
|
|
try gc.rendererPlugins.append(gc.allocator, ref);
|
|
}
|
|
var gCooking: bool = false;
|
|
|
|
const primitives = [_]assets.AssetImportReference{
|
|
assets.MakeImportRef("Mesh", "m_primitive_sphere", "meshes/primitive_sphere.obj"),
|
|
assets.MakeImportRef("Mesh", "m_primitive_box", "meshes/primitive_box.obj"),
|
|
assets.MakeImportRef("Mesh", "m_primitive_line", "meshes/primitive_line.obj"),
|
|
assets.MakeImportRef("Mesh", "m_skybox", "meshes/skybox.obj"),
|
|
};
|
|
|
|
pub fn start_module(comptime programSpec: anytype, args: anytype, allocator: std.mem.Allocator) !void {
|
|
_ = args;
|
|
if (!core.isUtility()) {
|
|
engine_logs("graphics module starting up...");
|
|
|
|
const context: *NeonVkContext = core.gEngine.createObject(
|
|
NeonVkContext,
|
|
.{ .can_tick = true, .isCore = true },
|
|
) catch unreachable;
|
|
|
|
vk_renderer.gContext = context;
|
|
|
|
const as = try core.createObject(AnimationSystem, .{ .can_tick = false });
|
|
try animation_loaders.initLoaders();
|
|
|
|
try registerRendererPlugin(as);
|
|
|
|
vk_assetLoaders.init_loaders(allocator) catch unreachable;
|
|
|
|
try assets.loadList(primitives);
|
|
debug_draw.init_debug_draw_subsystem() catch unreachable;
|
|
|
|
context.skybox = SkyboxSystem.create(context.allocator) catch return core.EngineDataEventError.UnknownStatePanic;
|
|
}
|
|
|
|
if (@hasField(@TypeOf(programSpec), "cooking")) {
|
|
gCooking = true;
|
|
try texture_cooking.initCooker(allocator);
|
|
try mesh_cooking.initCooker(allocator);
|
|
}
|
|
}
|
|
|
|
pub fn shutdown_module(allocator: std.mem.Allocator) void {
|
|
_ = allocator;
|
|
if (gCooking) {
|
|
mesh_cooking.deinitCooker();
|
|
texture_cooking.deinitCooker();
|
|
}
|
|
if (!core.isUtility()) {
|
|
engine_logs("graphics module shutting down...");
|
|
vk_renderer.gContext.shutdown();
|
|
}
|
|
}
|
|
|
|
pub var icon: []const u8 = "content/textures/icon.png";
|
|
|
|
pub fn setStartupSettings(comptime field: []const u8, value: anytype) void {
|
|
@field(vk_renderer.gGraphicsStartupSettings, field) = value;
|
|
}
|
|
|
|
pub fn getStartupSettings() *const @TypeOf(vk_renderer.gGraphicsStartupSettings) {
|
|
return &vk_renderer.gGraphicsStartupSettings;
|
|
}
|
|
|
|
pub fn loadSpv(allocator: std.mem.Allocator, path: []const u8) ![]const u32 {
|
|
core.engine_log("loading path {s}", .{path});
|
|
const search_prefixes: []const []const u8 = &.{
|
|
"zig-out/shaders",
|
|
"shaders",
|
|
};
|
|
|
|
var s_path: [4096]u8 = undefined;
|
|
|
|
for (search_prefixes) |prefix| {
|
|
const s = try std.fmt.bufPrint(&s_path, "{s}/{s}", .{ prefix, path });
|
|
var file = std.fs.cwd().openFile(s, .{ .mode = .read_only }) catch continue;
|
|
const filesize = (try file.stat()).size;
|
|
const buffer: []u8 = try allocator.alignedAlloc(u8, 4, filesize);
|
|
try file.reader().readNoEof(buffer);
|
|
|
|
var rv: []u32 = undefined;
|
|
rv.ptr = @as([*]u32, @ptrCast(@alignCast(buffer.ptr)));
|
|
rv.len = buffer.len / 4;
|
|
return rv;
|
|
}
|
|
|
|
return error.FileNotFound;
|
|
}
|
|
|
|
pub const Module = core.ModuleDescription{
|
|
.name = "graphics",
|
|
.enabledByDefault = true,
|
|
};
|