载入中...
搜索中...
未找到
VirtualGeometry.cpp
浏览该文件的文档.
3
4#include "common/Exception.h"
5#include "common/Module.h"
6#include "graphics/Graphics.h"
7
8#include <simplesquirrel/simplesquirrel.hpp>
9
10#include <functional>
11#include <string>
12
13namespace eve::virtualgeometry {
14namespace {
15
16std::string currentGraphicsBackend() {
17 auto *gfx = eve::ModuleManager::getInstance<eve::graphics::Graphics>("Graphics");
18 if (!gfx) gfx = eve::graphics::Graphics::create();
19 if (!gfx) return {};
20 return gfx->getBackendName();
21}
22
23} // namespace
24
26
28 const std::string backend = currentGraphicsBackend();
29 return backend == "vulkan" || backend == "webgpu";
30}
31
33 const std::string backend = currentGraphicsBackend();
34 if (backend != "vulkan" && backend != "webgpu")
35 throw Exception("VirtualGeometry.newRenderer: requires vulkan or webgpu Graphics backend");
36 return new VirtualGeometryRenderer();
37}
38
39void VirtualGeometry::expose(ssq::Table &table) {
40 auto cls = table.addClass(name, VirtualGeometry::create, false);
41 expose(cls);
42
43 auto renderer = table.addClass<VirtualGeometryRenderer>(
44 "VirtualGeometryRenderer",
45 std::function<VirtualGeometryRenderer *()>([]() -> VirtualGeometryRenderer * {
46 return nullptr;
47 }),
48 true);
49 renderer.addFunc("buildIcosphere", &VirtualGeometryRenderer::buildIcosphere);
50 renderer.addFunc("setViewport", &VirtualGeometryRenderer::setViewport);
51 renderer.addFunc("setCameraSimple", &VirtualGeometryRenderer::setCameraSimple);
52 renderer.addFunc("setModelYaw", &VirtualGeometryRenderer::setModelYaw);
53 renderer.addFunc("update", &VirtualGeometryRenderer::update);
54 renderer.addFunc("resolve", &VirtualGeometryRenderer::resolveByteData);
55 renderer.addFunc("getViewWidth", &VirtualGeometryRenderer::getViewWidth);
56 renderer.addFunc("getViewHeight", &VirtualGeometryRenderer::getViewHeight);
57 renderer.addFunc("isReady", &VirtualGeometryRenderer::isReady);
58 renderer.addFunc("getClusterCount", &VirtualGeometryRenderer::getClusterCount);
59 renderer.addFunc("getVisibleCount", &VirtualGeometryRenderer::getVisibleCount);
60 renderer.addFunc("getTotalTriangleCount", &VirtualGeometryRenderer::getTotalTriangleCount);
61 renderer.addFunc("getLodLevel", &VirtualGeometryRenderer::getLodLevel);
62 renderer.addFunc("getMaxLodLevel", &VirtualGeometryRenderer::getMaxLodLevel);
63}
64
65void VirtualGeometry::expose(ssq::Class &cls) {
66 cls.addFunc("getName", &VirtualGeometry::getName);
67 cls.addFunc("isAvailable", &VirtualGeometry::isAvailable);
68 cls.addFunc("newRenderer", &VirtualGeometry::newRenderer);
69}
70
71} // namespace eve::virtualgeometry
HSQOBJECT cls
Definition ECS.cpp:21
std::string name
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:26
EVENGINE_API_FOUNDATION public API.
Definition Exception.h:13
virtual std::string getName() const =0
Returns the name.
A virtual-geometry renderer: preprocesses a mesh into a cluster DAG, uploads it to the GPU,...
bool buildIcosphere(int subdiv)
Convenience: procedural unit icosphere, subdiv subdivision levels.
void setViewport(int width, int height, float fovYDeg, float errorPx=1.0f)
Sets the viewport.
int update()
Run cull + raster; returns the number of visible clusters.
int getClusterCount() const
Returns the cluster count.
void setModelYaw(float yaw)
Spin the virtualized model about Y by yaw radians each frame.
void setCameraSimple(float camX, float camY, float camZ, float nearZ=0.1f, float farZ=100.f)
Script-friendly: identity view (camera looking down -Z) + perspective.
int getMaxLodLevel() const
Returns the max lod level.
int getVisibleCount() const
Returns the visible count.
int getTotalTriangleCount() const
Returns the total triangle count.
int getViewHeight() const
Returns the view height.
int getLodLevel(int clusterId) const
Returns the lod level.
int getViewWidth() const
Returns the view width.
eve::data::ByteData * resolveByteData()
Resolve into a heap ByteData (RGBA) for scripting/display.
Virtual-geometry module — Nanite-style virtualized geometry rendering on top of the active Graphics b...
bool isAvailable() const
True when the active Graphics backend can run virtual geometry.
VirtualGeometryRenderer * newRenderer()
Create a virtual-geometry renderer (holds GPU buffers).