MCPcopy Create free account
hub / github.com/RenderKit/ospray / createSh

Method createSh

modules/cpu/lights/SpotLight.cpp:23–67  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21namespace ospray {
22
23ispc::Light *SpotLight::createSh(uint32_t, const ispc::Instance *instance) const
24{
25 ispc::SpotLight *sh =
26 StructSharedCreate<ispc::SpotLight>(getISPCDevice().getDRTDevice());
27#ifndef OSPRAY_TARGET_SYCL
28 sh->super.sample =
29 reinterpret_cast<ispc::Light_SampleFunc>(ispc::SpotLight_sample_addr());
30 sh->super.eval =
31 reinterpret_cast<ispc::Light_EvalFunc>(ispc::SpotLight_eval_addr());
32#endif
33 sh->super.isVisible = visible;
34 sh->super.instance = instance;
35
36 sh->pre.position = position;
37 sh->pre.direction = normalize(direction);
38
39 intensityDistribution.setSh(sh->intensityDistribution);
40
41 // Enable dynamic runtime instancing or apply static transformation
42 if (instance) {
43 sh->pre.c0 = intensityDistribution.c0;
44 if (instance->motionBlur) {
45#ifndef OSPRAY_TARGET_SYCL
46 sh->super.sample = reinterpret_cast<ispc::Light_SampleFunc>(
47 ispc::SpotLight_sample_instanced_addr());
48 sh->super.eval = reinterpret_cast<ispc::Light_EvalFunc>(
49 ispc::SpotLight_eval_instanced_addr());
50#endif
51 } else
52 ispc::SpotLight_Transform(&sh->pre, instance->xfm, &sh->pre);
53 } else {
54 sh->pre.c90 = normalize(cross(intensityDistribution.c0, sh->pre.direction));
55 sh->pre.c0 = cross(sh->pre.direction, sh->pre.c90);
56 }
57
58 sh->radiance = radiance;
59 sh->intensity = radIntensity;
60 sh->cosAngleMax = cosAngleMax;
61 sh->cosAngleScale = cosAngleScale;
62 sh->radius = radius;
63 sh->innerRadius = innerRadius;
64 sh->areaPdf = uniformSampleRingPDF(radius, innerRadius);
65
66 return &sh->super;
67}
68
69std::string SpotLight::toString() const
70{

Callers

nothing calls this directly

Calls 2

uniformSampleRingPDFFunction · 0.85
setShMethod · 0.80

Tested by

no test coverage detected