Skip to content

Commit b09dda1

Browse files
committed
make sure ANARI render pass always retains the lifetime of passed objects
1 parent 1e6de93 commit b09dda1

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

tsd/src/render_pipeline/RenderPass.cpp

+14-3
Original file line numberDiff line numberDiff line change
@@ -177,25 +177,37 @@ AnariRenderPass::~AnariRenderPass()
177177
anari::wait(m_device, m_frame);
178178

179179
anari::release(m_device, m_frame);
180+
anari::release(m_device, m_camera);
181+
anari::release(m_device, m_renderer);
182+
anari::release(m_device, m_world);
180183
anari::release(m_device, m_device);
181184
}
182185

183186
void AnariRenderPass::setCamera(anari::Camera c)
184187
{
188+
anari::retain(m_device, c);
185189
anari::setParameter(m_device, m_frame, "camera", c);
186190
anari::commitParameters(m_device, m_frame);
191+
anari::release(m_device, m_camera);
192+
m_camera = c;
187193
}
188194

189195
void AnariRenderPass::setRenderer(anari::Renderer r)
190196
{
197+
anari::retain(m_device, r);
191198
anari::setParameter(m_device, m_frame, "renderer", r);
192199
anari::commitParameters(m_device, m_frame);
200+
anari::release(m_device, m_renderer);
201+
m_renderer = r;
193202
}
194203

195204
void AnariRenderPass::setWorld(anari::World w)
196205
{
206+
anari::retain(m_device, w);
197207
anari::setParameter(m_device, m_frame, "world", w);
198208
anari::commitParameters(m_device, m_frame);
209+
anari::release(m_device, m_world);
210+
m_world = w;
199211
}
200212

201213
void AnariRenderPass::setColorFormat(anari::DataType t)
@@ -264,9 +276,8 @@ void AnariRenderPass::copyFrameData()
264276
auto objectId = anari::map<uint32_t>(m_device, m_frame, idChannel);
265277

266278
const tsd::uint2 size(getDimensions());
267-
if (size.x == color.width && size.y == color.height) {
268-
const size_t totalSize = size.x * size.y;
269-
279+
const size_t totalSize = size.x * size.y;
280+
if (totalSize > 0 && size.x == color.width && size.y == color.height) {
270281
if (color.pixelType == ANARI_FLOAT32_VEC4) {
271282
convertFloatColorBuffer(
272283
(const float *)color.data, (uint8_t *)m_buffers.color, totalSize * 4);

tsd/src/render_pipeline/RenderPass.h

+3
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ struct AnariRenderPass : public RenderPass
7373
bool m_deviceSupportsCUDAFrames{false};
7474

7575
anari::Device m_device{nullptr};
76+
anari::Camera m_camera{nullptr};
77+
anari::Renderer m_renderer{nullptr};
78+
anari::World m_world{nullptr};
7679
anari::Frame m_frame{nullptr};
7780
};
7881

0 commit comments

Comments
 (0)