载入中...
搜索中...
未找到
Renderable3DBindings.cpp
浏览该文件的文档.
2#include <simplesquirrel/simplesquirrel.hpp>
4#include "graphics/Mesh.h"
6#include "graphics/Shader.h"
7#include "graphics/Texture.h"
8
9namespace eve::graphics::detail {
10void exposeRenderable3DBindings(ssq::Table& table) {
11 auto ent = table.addClass<Renderable3D>(
12 "Renderable3D", std::function<Renderable3D*()>([]() { return Renderable3D::create(); }), false);
13 ent.addFunc("getEntityId", &Renderable3D::getEntityId);
14 ent.addFunc("getEntityGeneration", &Renderable3D::getEntityGeneration);
15 ent.addFunc("setPosition", &Renderable3D::setPosition);
16 ent.addFunc("setRotation", &Renderable3D::setRotation);
17 ent.addFunc("setYaw", &Renderable3D::setYaw);
18 ent.addFunc("getYaw", &Renderable3D::getYaw);
19 ent.addFunc("setScale", &Renderable3D::setScale);
20 ent.addFunc("setMesh", &Renderable3D::setMesh);
21 ent.addFunc("getMesh", &Renderable3D::getMesh);
22 const auto vm = table.getHandle();
23 ent.addFunc("setInstanceRange", [vm](Renderable3D* self, int64_t first, int64_t count, ssq::Array minimum,
24 ssq::Array maximum, float distance) {
25 try {
26 if (!self || first < 0 || count < 0 || uint64_t(first) > UINT32_MAX || uint64_t(count) > UINT32_MAX ||
27 minimum.size() != 3 || maximum.size() != 3)
28 throw std::runtime_error("Expected nonnegative instance range and two float3 bounds");
30 range.first = uint32_t(first);
31 range.count = uint32_t(count);
32 range.maximumHorizontalDistance = distance;
33 for (int i = 0; i < 3; ++i) {
34 range.minimum[i] = minimum.get<float>(i);
35 range.maximum[i] = maximum.get<float>(i);
36 }
38 } catch (const std::exception& error) {
40 DiagnosticCode::InvalidArgument, error.what(), "graphics.instances")));
41 }
42 });
43 ent.addFunc("clearInstanceRange", &Renderable3D::clearInstanceRange);
44 ent.addFunc("setTexture", &Renderable3D::setTexture);
45 ent.addFunc("setNormalTexture", &Renderable3D::setNormalTexture);
46 ent.addFunc("setPackedNormalMask", &Renderable3D::setPackedNormalMask);
47 ent.addFunc("setHeightTexture", &Renderable3D::setHeightTexture);
48 ent.addFunc("setShader", &Renderable3D::setShader);
49 ent.addFunc("setMaterial", &Renderable3D::setMaterial);
50 ent.addFunc("getMaterial", &Renderable3D::getMaterial);
51 ent.addFunc("setPart", &Renderable3D::setPart);
52 ent.addFunc("setPartSortPriority", &Renderable3D::setPartSortPriority);
53 ent.addFunc("clearPartSortPriority", &Renderable3D::clearPartSortPriority);
54 ent.addFunc("getPartSortPriority", &Renderable3D::getPartSortPriority);
55 ent.addFunc("clearParts", &Renderable3D::clearParts);
56 ent.addFunc("getPartCount", &Renderable3D::getPartCount);
57 ent.addFunc("getPartName", &Renderable3D::getPartName);
58 ent.addFunc("getPartMesh", &Renderable3D::getPartMesh);
59 ent.addFunc("getPartMaterial", &Renderable3D::getPartMaterial);
60 ent.addFunc("setHair", &Renderable3D::setHair);
61 ent.addFunc("getHair", &Renderable3D::getHair);
62 ent.addFunc("setTint", &Renderable3D::setTint);
63 ent.addFunc("getTintR", &Renderable3D::getTintR);
64 ent.addFunc("getTintG", &Renderable3D::getTintG);
65 ent.addFunc("getTintB", &Renderable3D::getTintB);
66 ent.addFunc("getRoughness", &Renderable3D::getRoughness);
67 ent.addFunc("setMetallic", &Renderable3D::setMetallic);
68 ent.addFunc("setRoughness", &Renderable3D::setRoughness);
69 ent.addFunc("setTexCellBomb", &Renderable3D::setTexCellBomb);
70 ent.addFunc("getTexCellBombScale", &Renderable3D::getTexCellBombScale);
71 ent.addFunc("getTexCellBombStrength", &Renderable3D::getTexCellBombStrength);
72 ent.addFunc("getTexCellBombRotation", &Renderable3D::getTexCellBombRotation);
73 ent.addFunc("setParallax", &Renderable3D::setParallax);
74 ent.addFunc("getParallaxScale", &Renderable3D::getParallaxScale);
75 ent.addFunc("getParallaxMinLayers", &Renderable3D::getParallaxMinLayers);
76 ent.addFunc("getParallaxMaxLayers", &Renderable3D::getParallaxMaxLayers);
77 ent.addFunc("setVisible", &Renderable3D::setVisible);
78 ent.addFunc("getVisible", &Renderable3D::getVisible);
79 ent.addFunc("setLayer", &Renderable3D::setLayer);
80 ent.addFunc("getLayer", &Renderable3D::getLayer);
81 ent.addFunc("setReflectionCaptureMask", &Renderable3D::setReflectionCaptureMask);
82 ent.addFunc("getReflectionCaptureMask", &Renderable3D::getReflectionCaptureMask);
83 ent.addFunc("setReceiveLight", &Renderable3D::setReceiveLight);
84 ent.addFunc("setCastShadow", &Renderable3D::setCastShadow);
85 ent.addFunc("setReceiveShadow", &Renderable3D::setReceiveShadow);
86 ent.addFunc("setCastOcclusion", &Renderable3D::setCastOcclusion);
87 ent.addFunc("getCastOcclusion", &Renderable3D::getCastOcclusion);
88 ent.addFunc("setCamera", &Renderable3D::setCamera);
89 ent.addFunc("setMeshLod", &Renderable3D::setMeshLod);
90 ent.addFunc("clearMeshLod", &Renderable3D::clearMeshLod);
91 ent.addFunc("getMeshLodCount", &Renderable3D::getMeshLodCount);
92 ent.addFunc("getMeshLodLevelAtDistance", &Renderable3D::getMeshLodLevelAtDistance);
93}
94} // namespace eve::graphics::detail
HSQUIRRELVM vm
Definition ECS.cpp:20
float maximum[3]
float minimum[3]
std::int32_t first
Range range
float distance
std::string error
Definition Package.cpp:60
std::uint32_t count
The single Squirrel projection for common Result, Status and Value.
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
Move-only operation result carrying either a value or Status.
Definition Result.h:155
EVENGINE_API_BACKENDS public API.
void setNormalTexture(Texture *texture)
void setCamera(Camera3D *camera)
void setReflectionCaptureMask(int mask)
Set the bit mask used to include this object in reflection-probe captures.
int getMeshLodLevelAtDistance(float distance)
void setPartSortPriority(int index, int priority)
Override transparent sorting for one part without mutating its shared Material.
float getRoughness()
Return the field-backed material roughness.
std::string getPartName(int index)
Material * getPartMaterial(int index)
void clearInstanceRange()
Remove runtime instance metadata on the update thread; no callbacks.
void setRotation(float yaw, float pitch, float roll)
Result< void > setInstanceRange(const MeshInstanceRange &range)
Atomically set static instance range and bounds; render/update thread only. @ownership Metadata is co...
void setLayer(int layer)
Assign this renderable to a camera-culling layer in [0,31].
void setHeightTexture(Texture *texture)
Height map for parallax (R channel; white = raised). nullptr disables sampling.
void setPart(int index, const std::string &name, Mesh *mesh, Material *material)
Bind a named mesh+material part (e.g. Assimp submesh / body region). index 0..kMaxParts-1....
void setTexCellBomb(float cellScale, float strength, float rotAmount=1.f)
Texture cell bombing — random per-cell UV offset/rotation blended across a 2×2 neighborhood to hide t...
Mesh * getMesh()
Main (non-part) mesh attached via setMesh; nullptr when unset.
void setTint(float r, float g, float b, float a=1.f)
float getTintG()
Return the field-backed material tint green channel.
void setMetallic(float metallic)
float getTintR()
Return the field-backed material tint red channel.
void setTexture(Texture *texture)
void setReceiveLight(bool receive)
void setShader(Shader *shader)
int getReflectionCaptureMask()
Return the reflection-probe capture bit mask.
void setMaterial(Material *material)
Attach a Material that packages shading method + surface params.
void setPackedNormalMask(bool enabled)
Enable RG normal XY, B AO and A smoothness interpretation for the normal texture.
void setParallax(float scale, float minLayers=8.f, float maxLayers=32.f)
Parallax occlusion mapping. scale 0 disables (default). Typical scale 0.02..0.08. Requires a height t...
void setPosition(float x, float y, float z)
void clearPartSortPriority(int index)
Clear a part's per-instance sort override and use its Material priority.
float getTintB()
Return the field-backed material tint blue channel.
int getPartSortPriority(int index)
Return the effective per-part or Material transparent sort priority.
Mesh * getPartMesh(int index)
uint32_t getEntityId() const
Return the table-local entity id used with getEntityGeneration().
int getLayer()
Return this renderable's camera-culling layer.
bool getVisible()
Return whether this renderable participates in scene rendering.
void setMeshLod(int index, Mesh *mesh, float switchDistance=0.f)
Configure geometric LOD. index 0 = highest detail. For index > 0, switchDistance is the camera distan...
uint32_t getEntityGeneration() const
Return the generation required to reject stale entity ids.
void setRoughness(float roughness)
void setScale(float sx, float sy, float sz)
void setReceiveShadow(bool receive)
void setVisible(bool visible)
void exposeRenderable3DBindings(ssq::Table &table)
Expose renderable 3 d bindings.
ssq::Table projectResult(HSQUIRRELVM vm, Result< void > &&result)
Consume and project a void native Result using the common schema.
Value-owned subset of a resource shader's static instances.