载入中...
搜索中...
未找到
VirtualTextureBlend.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Result.h"
4#include "image/ImageData.h"
5
6#include <cstddef>
7#include <cstdint>
8#include <list>
9#include <memory>
10#include <unordered_map>
11#include <vector>
12
13namespace eve::graphics {
14
17 int width = 1024;
18 int height = 1024;
19 int tileSize = 128;
20 int borderSize = 2;
21 std::size_t residentPageCapacity = 64;
22};
23
26 std::shared_ptr<const image::ImageData> albedo;
27 std::shared_ptr<const image::ImageData> normal;
28 std::shared_ptr<const image::ImageData> weight;
29 float uvScale = 1.f;
30 float constantWeight = 1.f;
31 float heightContrast = 0.f;
32};
33
36 std::size_t residentPages = 0;
37 std::uint64_t pageHits = 0;
38 std::uint64_t pageMisses = 0;
39 std::uint64_t pageEvictions = 0;
40};
41
44 int x = 0;
45 int y = 0;
47 bool operator==(const VirtualTexturePageId& other) const = default;
48};
49
58 std::unique_ptr<image::ImageData> albedoAtlas;
59 std::unique_ptr<image::ImageData> normalAtlas;
60 std::unique_ptr<image::ImageData> pageTable;
61 int atlasSlotsX = 0;
62 int atlasSlotsY = 0;
63 int pageExtent = 0;
64 float borderFraction = 0.f;
65 std::size_t residentPages = 0;
66};
67
81public:
83 [[nodiscard]] static eve::Result<std::unique_ptr<VirtualTextureBlend>> create(
84 const VirtualTextureBlendConfig& config);
85
90 [[nodiscard]] eve::Result<std::uint32_t> addLayer(const VirtualTextureBlendLayer& layer);
91
96 [[nodiscard]] eve::Result<std::shared_ptr<const image::ImageData>> requestAlbedoPage(int pageX, int pageY,
97 int mipLevel);
98
100 [[nodiscard]] eve::Result<std::shared_ptr<const image::ImageData>> requestNormalPage(int pageX, int pageY,
101 int mipLevel);
102
104 [[nodiscard]] eve::Result<std::unique_ptr<image::ImageData>> bakeAlbedo();
105
107 [[nodiscard]] eve::Result<std::unique_ptr<image::ImageData>> bakeNormal();
108
114 [[nodiscard]] eve::Result<VirtualTextureResidentSet> buildResidentSet(
115 const std::vector<VirtualTexturePageId>& residentPages);
116
118 void invalidate();
119
122
124 int pageCountX(int mipLevel = 0) const;
126 int pageCountY(int mipLevel = 0) const;
128 const VirtualTextureBlendConfig& config() const { return config_; }
129
130private:
131 enum class Attribute : std::uint8_t { Albedo, Normal };
132 struct PageKey {
133 int x = 0;
134 int y = 0;
135 int mip = 0;
136 Attribute attribute = Attribute::Albedo;
138 bool operator==(const PageKey& other) const = default;
139 };
140 struct PageKeyHash {
142 std::size_t operator()(const PageKey& key) const noexcept;
143 };
144 struct CacheEntry {
145 std::shared_ptr<const image::ImageData> image;
146 std::list<PageKey>::iterator lru;
147 };
148
149 explicit VirtualTextureBlend(VirtualTextureBlendConfig config) : config_(config) {}
150 [[nodiscard]] eve::Result<std::shared_ptr<const image::ImageData>> requestPage(PageKey key);
151 std::shared_ptr<const image::ImageData> composePage(const PageKey& key) const;
152 [[nodiscard]] eve::Result<std::unique_ptr<image::ImageData>> bakeAttribute(Attribute attribute);
153
154 VirtualTextureBlendConfig config_;
155 std::vector<VirtualTextureBlendLayer> layers_;
156 std::list<PageKey> lru_;
157 std::unordered_map<PageKey, CacheEntry, PageKeyHash> cache_;
158 std::uint64_t hits_ = 0;
159 std::uint64_t misses_ = 0;
160 std::uint64_t evictions_ = 0;
161};
162
163} // namespace eve::graphics
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
#define EVENGINE_API_BACKENDS
Definition Export.h:108
std::uint32_t key
vk::UniqueImage image
OnnxTransferStats stats
Definition OnnxGpgpu.cpp:56
TileLayer * layer
Move-only, checked operation results for the common layer.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
CPU reference implementation of a tiled, height-aware material virtual texture.
const VirtualTextureBlendConfig & config() const
Config.
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
Backend-neutral configuration for a paged material-attribute texture.
One immutable source layer copied into a VirtualTextureBlend.
std::shared_ptr< const image::ImageData > albedo
std::shared_ptr< const image::ImageData > normal
std::shared_ptr< const image::ImageData > weight
Observable residency counters for virtual-texture diagnostics.
Mip-zero virtual page selected for physical residency.
bool operator==(const VirtualTexturePageId &other) const =default
Operator ==.
CPU images and sampling metadata for one atomically publishable physical cache.
std::unique_ptr< image::ImageData > albedoAtlas
std::unique_ptr< image::ImageData > pageTable
std::unique_ptr< image::ImageData > normalAtlas