VisuTwin Canvas
C++ 3D Engine — Metal Backend
Loading...
Searching...
No Matches
asset.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2025-2026 Arnis Lektauers
3//
4// Created by Arnis Lektauers on 18.10.2025.
5//
6#pragma once
7
8#include <functional>
9#include <string>
10#include <variant>
11#include <core/eventHandler.h>
15
16namespace visutwin::canvas
17{
18 class GraphicsDevice;
19 class ResourceLoader;
20
21 namespace AssetType {
22 constexpr const char* ANIMATION = "animation";
23 constexpr const char* AUDIO = "audio";
24 constexpr const char* BINARY = "binary";
25 constexpr const char* CONTAINER = "container";
26 constexpr const char* CUBEMAP = "cubemap";
27 constexpr const char* CSS = "css";
28 constexpr const char* FONT = "font";
29 constexpr const char* GSPLAT = "gsplat";
30 constexpr const char* JSON = "json";
31 constexpr const char* HTML = "html";
32 constexpr const char* MATERIAL = "material";
33 constexpr const char* MODEL = "model";
34 constexpr const char* RENDER = "render";
35 constexpr const char* SCRIPT = "script";
36 constexpr const char* SHADER = "shader";
37 constexpr const char* SPRITE = "sprite";
38 constexpr const char* TEMPLATE = "template";
39 constexpr const char* TEXT = "text";
40 constexpr const char* TEXTURE = "texture";
41 constexpr const char* TEXTUREATLAS = "textureatlas";
42 }
43
44 // Texture types
45 namespace TextureType
46 {
47 constexpr const char* TEXTURETYPE_DEFAULT = "default";
48 constexpr const char* TEXTURETYPE_RGBM = "rgbm";
49 constexpr const char* TEXTURETYPE_RGBE = "rgbe";
50 constexpr const char* TEXTURETYPE_RGBP = "rgbp";
51 constexpr const char* TEXTURETYPE_SWIZZLEGGGR = "swizzleGGGR";
52 }
53
54 struct AssetData
55 {
57 bool mipmaps = false;
58 };
59
60 using Resource = std::variant<Texture*, ContainerResource*, FontResource*>;
61
70 class Asset : public EventHandler
71 {
72 public:
73 Asset(const std::string& name, const std::string& type, const std::string& file, const AssetData& data = {});
74
75 static void setDefaultGraphicsDevice(const std::shared_ptr<GraphicsDevice>& graphicsDevice);
76
77 bool preload() const { return _preload; }
78
79 const std::string& name() const { return _name; }
80 const std::string& type() const { return _type; }
81 const std::string& file() const { return _file; }
82 const AssetData& data() const { return _data; }
83
84 // Destroys the associated resource and marks asset as unloaded
85 void unload();
86
88 std::optional<Resource> resource();
89
100 void loadAsync(ResourceLoader& loader,
101 std::function<void(std::optional<Resource>)> callback);
102
103 private:
104 static std::weak_ptr<GraphicsDevice> _defaultGraphicsDevice;
105
106 bool _preload;
107
108 std::string _name;
109 std::string _type;
110 std::string _file;
111
112 AssetData _data;
113
114 std::vector<Resource> _resources;
115 };
116}
static void setDefaultGraphicsDevice(const std::shared_ptr< GraphicsDevice > &graphicsDevice)
Definition asset.cpp:30
const AssetData & data() const
Definition asset.h:82
void loadAsync(ResourceLoader &loader, std::function< void(std::optional< Resource >)> callback)
Definition asset.cpp:206
std::optional< Resource > resource()
Synchronous load — blocks until the resource is ready.
Definition asset.cpp:54
const std::string & type() const
Definition asset.h:80
Asset(const std::string &name, const std::string &type, const std::string &file, const AssetData &data={})
Definition asset.cpp:25
const std::string & file() const
Definition asset.h:81
const std::string & name() const
Definition asset.h:79
bool preload() const
Definition asset.h:77
Abstract GPU interface for resource creation, state management, and draw submission.
Async resource loader with background I/O thread, pixel decoding, and main-thread callbacks.
constexpr const char * AUDIO
Definition asset.h:23
constexpr const char * CONTAINER
Definition asset.h:25
constexpr const char * SPRITE
Definition asset.h:37
constexpr const char * SCRIPT
Definition asset.h:35
constexpr const char * TEMPLATE
Definition asset.h:38
constexpr const char * JSON
Definition asset.h:30
constexpr const char * ANIMATION
Definition asset.h:22
constexpr const char * FONT
Definition asset.h:28
constexpr const char * CSS
Definition asset.h:27
constexpr const char * MODEL
Definition asset.h:33
constexpr const char * TEXT
Definition asset.h:39
constexpr const char * SHADER
Definition asset.h:36
constexpr const char * RENDER
Definition asset.h:34
constexpr const char * TEXTURE
Definition asset.h:40
constexpr const char * HTML
Definition asset.h:31
constexpr const char * GSPLAT
Definition asset.h:29
constexpr const char * BINARY
Definition asset.h:24
constexpr const char * TEXTUREATLAS
Definition asset.h:41
constexpr const char * CUBEMAP
Definition asset.h:26
constexpr const char * MATERIAL
Definition asset.h:32
constexpr const char * TEXTURETYPE_DEFAULT
Definition asset.h:47
constexpr const char * TEXTURETYPE_RGBE
Definition asset.h:49
constexpr const char * TEXTURETYPE_SWIZZLEGGGR
Definition asset.h:51
constexpr const char * TEXTURETYPE_RGBM
Definition asset.h:48
constexpr const char * TEXTURETYPE_RGBP
Definition asset.h:50
std::variant< Texture *, ContainerResource *, FontResource * > Resource
Definition asset.h:60