summaryrefslogtreecommitdiff
path: root/src/gpu/texture_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/texture_manager.h')
-rw-r--r--src/gpu/texture_manager.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/gpu/texture_manager.h b/src/gpu/texture_manager.h
new file mode 100644
index 0000000..3faf74c
--- /dev/null
+++ b/src/gpu/texture_manager.h
@@ -0,0 +1,48 @@
+// This file is part of the 64k demo project.
+// It defines the TextureManager for procedural assets.
+// Handles generation and GPU upload of procedural textures.
+
+#pragma once
+
+#include "gpu/gpu.h"
+#include <map>
+#include <string>
+#include <vector>
+
+#if defined(DEMO_CROSS_COMPILE_WIN32)
+#include <webgpu/webgpu.h>
+#else
+#include <webgpu.h>
+#endif
+
+struct ProceduralTextureDef {
+ int width;
+ int height;
+ void (*gen_func)(uint8_t*, int, int, const float*, int);
+ std::vector<float> params;
+};
+
+struct GpuTexture {
+ WGPUTexture texture;
+ WGPUTextureView view;
+ int width;
+ int height;
+};
+
+class TextureManager {
+ public:
+ void init(WGPUDevice device, WGPUQueue queue);
+ void shutdown();
+
+ // Registers and generates a texture immediately
+ void create_procedural_texture(const std::string& name,
+ const ProceduralTextureDef& def);
+
+ // Retrieves a texture view by name (returns nullptr if not found)
+ WGPUTextureView get_texture_view(const std::string& name);
+
+ private:
+ WGPUDevice device_;
+ WGPUQueue queue_;
+ std::map<std::string, GpuTexture> textures_;
+};