MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Falcor / FALCOR_SCRIPT_BINDING

Function FALCOR_SCRIPT_BINDING

Source/Falcor/Core/Program/ShaderVar.cpp:399–481  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

397}
398
399FALCOR_SCRIPT_BINDING(ShaderVar)
400{
401 FALCOR_SCRIPT_BINDING_DEPENDENCY(Buffer)
402 FALCOR_SCRIPT_BINDING_DEPENDENCY(Texture)
403
404 pybind11::class_<ShaderVar> shaderVar(m, "ShaderVar");
405
406 shaderVar.def("__getitem__", [](ShaderVar& self, std::string_view name) { return self[name]; });
407 shaderVar.def("__getattr__", [](ShaderVar& self, std::string_view name) { return self[name]; });
408
409#define def_setter(type) \
410 shaderVar.def("__setitem__", [](ShaderVar& self, std::string_view name, type value) { self[name] = value; }); \
411 shaderVar.def("__setattr__", [](ShaderVar& self, std::string_view name, type value) { self[name] = value; });
412
413 def_setter(ref<Buffer>);
414 def_setter(ref<Texture>);
415 def_setter(ref<Sampler>);
416
417 def_setter(uint2);
418 def_setter(uint3);
419 def_setter(uint4);
420
421 def_setter(int2);
422 def_setter(int3);
423 def_setter(int4);
424
425 def_setter(bool);
426 def_setter(bool2);
427 def_setter(bool3);
428 def_setter(bool4);
429
430 def_setter(float2);
431 def_setter(float3);
432 def_setter(float4);
433
434 def_setter(float3x4);
435 def_setter(float4x4);
436
437#undef def_setter
438
439 // We need to handle integers and floats specially.
440 // Python only has an `int` and `float` type that can have different bit-width.
441 // We use reflection data to convert the python types to the correct types before assigning.
442
443 auto set_int = [](ShaderVar& self, std::string_view name, pybind11::int_ value)
444 {
445 const ReflectionBasicType* basicType = self[name].getType()->unwrapArray()->asBasicType();
446 FALCOR_CHECK(basicType, "Error trying to set a variable that is not a basic type.");
447 switch (basicType->getType())
448 {
449 case ReflectionBasicType::Type::Int:
450 self[name] = value.cast<int32_t>();
451 break;
452 case ReflectionBasicType::Type::Uint:
453 self[name] = value.cast<uint32_t>();
454 break;
455 default:
456 FALCOR_THROW("Error trying to set a variable that is not an integer type.");

Callers

nothing calls this directly

Calls 3

asBasicTypeMethod · 0.80
unwrapArrayMethod · 0.80
getTypeMethod · 0.45

Tested by

no test coverage detected