summaryrefslogtreecommitdiff
path: root/src/gpu/texture_manager.h
blob: 23fdbe871a8de3ff87dad71f07e2b1c6d775b111 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// 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>

struct ProceduralTextureDef {
  int width;
  int height;
  bool (*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);

  // Creates a texture from existing data (RGBA8)
  void create_texture(const std::string& name, int width, int height,
                      const uint8_t* data);

  // 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_;
};