载入中...
搜索中...
未找到
VirtualTextureBlend.cpp
浏览该文件的文档.
45 Color out{mix(a.r, b.r, c.r, d.r), mix(a.g, b.g, c.g, d.g), mix(a.b, b.b, c.b, d.b), mix(a.a, b.a, c.a, d.a)};
73 if (!layer.albedo) return eve::Result<std::uint32_t>::failure(invalid("virtual texture layer requires albedo"));
74 if (layer.albedo->getWidth() <= 0 || layer.albedo->getHeight() <= 0 || layer.albedo->getFormat() != "RGBA8")
80 if (!std::isfinite(layer.uvScale) || layer.uvScale <= 0.f || !std::isfinite(layer.constantWeight) ||
81 layer.constantWeight < 0.f || !std::isfinite(layer.heightContrast) || layer.heightContrast < 0.f)
84 return eve::Result<std::uint32_t>::failure(invalid("virtual texture supports at most 16 layers"));
115eve::Result<std::shared_ptr<const image::ImageData>> VirtualTextureBlend::requestAlbedoPage(int pageX, int pageY,
120eve::Result<std::shared_ptr<const image::ImageData>> VirtualTextureBlend::requestNormalPage(int pageX, int pageY,
125eve::Result<std::shared_ptr<const image::ImageData>> VirtualTextureBlend::requestPage(PageKey key) {
152std::shared_ptr<const image::ImageData> VirtualTextureBlend::composePage(const PageKey& key) const {
204 const float length = std::sqrt(output.r * output.r + output.g * output.g + output.b * output.b);
223eve::Result<std::unique_ptr<image::ImageData>> VirtualTextureBlend::bakeAttribute(Attribute attribute) {
231 if (!pageResult.ok()) return eve::Result<std::unique_ptr<image::ImageData>>::failure(pageResult.status());
235 output->paste(const_cast<image::ImageData*>(&page), pageX * config_.tileSize, pageY * config_.tileSize,
245 return eve::Result<VirtualTextureResidentSet>::failure(invalid("virtual texture has no material layers"));
266 output.albedoAtlas = std::make_unique<image::ImageData>(slotsX * extent, slotsY * extent, "RGBA8");
267 output.normalAtlas = std::make_unique<image::ImageData>(slotsX * extent, slotsY * extent, "RGBA8");
276 if (!albedoFallback.ok()) return eve::Result<VirtualTextureResidentSet>::failure(albedoFallback.status());
278 if (!normalFallback.ok()) return eve::Result<VirtualTextureResidentSet>::failure(normalFallback.status());
304 output.albedoAtlas->paste(const_cast<image::ImageData*>(albedo.value().get()), slotX * extent, slotY * extent,
306 output.normalAtlas->paste(const_cast<image::ImageData*>(normal.value().get()), slotX * extent, slotY * extent,
308 const Color entry{(float(slotX) + 0.5f) / float(slotsX), (float(slotY) + 0.5f) / float(slotsY), 1.f, 1.f};
319VirtualTextureBlendStats VirtualTextureBlend::stats() const { return {cache_.size(), hits_, misses_, evictions_}; }
A structured explanation of a failed, degraded, or noteworthy result.
Definition Diagnostic.h:94
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
CPU reference implementation of a tiled, height-aware material virtual texture.
Definition VirtualTextureBlend.h:80
eve::Result< std::unique_ptr< image::ImageData > > bakeNormal()
Bake the complete mip-zero tangent-space normal substitute for nonresident pages.
Definition VirtualTextureBlend.cpp:219
eve::Result< std::uint32_t > addLayer(const VirtualTextureBlendLayer &layer)
Copy and append one material layer, invalidating generated pages atomically.
Definition VirtualTextureBlend.cpp:72
static eve::Result< std::unique_ptr< VirtualTextureBlend > > create(const VirtualTextureBlendConfig &config)
Validate configuration and create an empty virtual texture.
Definition VirtualTextureBlend.cpp:55
eve::Result< std::shared_ptr< const image::ImageData > > requestAlbedoPage(int pageX, int pageY, int mipLevel)
Resolve one page at the requested mip level.
Definition VirtualTextureBlend.cpp:115
eve::Result< std::unique_ptr< image::ImageData > > bakeAlbedo()
Bake the complete mip-zero albedo substitute used for nonresident pages.
Definition VirtualTextureBlend.cpp:215
eve::Result< std::shared_ptr< const image::ImageData > > requestNormalPage(int pageX, int pageY, int mipLevel)
Resolve a tangent-space normal page using vector blending and renormalization.
Definition VirtualTextureBlend.cpp:120
eve::Result< VirtualTextureResidentSet > buildResidentSet(const std::vector< VirtualTexturePageId > &residentPages)
Build an atlas, page table, and whole-surface substitute for selected mip-zero pages.
Definition VirtualTextureBlend.cpp:242
void invalidate()
Clear generated pages while preserving immutable source layers.
Definition VirtualTextureBlend.cpp:314
VirtualTextureBlendStats stats() const
Snapshot current cache counters.
Definition VirtualTextureBlend.cpp:319
void setPixel(int x, int y, const Colorf &p)
Sets the pixel at location (x,y).
Definition ImageData.cpp:484
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
eve::Color Color
RGBA color used by every graphics draw call. Lives inside eve::graphics so including a graphics heade...
Definition Color.h:13
@ InvalidArgument
Backend-neutral configuration for a paged material-attribute texture.
Definition VirtualTextureBlend.h:16
std::size_t residentPageCapacity
Definition VirtualTextureBlend.h:21
int borderSize
Definition VirtualTextureBlend.h:20
One immutable source layer copied into a VirtualTextureBlend.
Definition VirtualTextureBlend.h:25
std::shared_ptr< const image::ImageData > albedo
Definition VirtualTextureBlend.h:26
Observable residency counters for virtual-texture diagnostics.
Definition VirtualTextureBlend.h:35
CPU images and sampling metadata for one atomically publishable physical cache.
Definition VirtualTextureBlend.h:57
std::unique_ptr< image::ImageData > albedoAtlas
Definition VirtualTextureBlend.h:58