Skip to content

Commit 0cb4666

Browse files
committed
Add IsBufferShared and GetBufferSize to the C API to inspect an already created RTCBuffer.
1 parent 0ed616e commit 0cb4666

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

include/embree4/rtcore_buffer.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ RTC_API RTCBuffer rtcNewBuffer(RTCDevice device, size_t byteSize);
4141
/* Creates a new shared buffer. */
4242
RTC_API RTCBuffer rtcNewSharedBuffer(RTCDevice device, void* ptr, size_t byteSize);
4343

44+
/* Returns if the buffer is a shared buffer. */
45+
RTC_API bool rtcIsBufferShared(RTCBuffer buffer);
46+
47+
/* Returns the size of the buffer in bytes. */
48+
RTC_API size_t rtcGetBufferSize(RTCBuffer buffer);
49+
4450
/* Returns a pointer to the buffer data. */
4551
RTC_API void* rtcGetBufferData(RTCBuffer buffer);
4652

kernels/common/buffer.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ namespace embree
111111
__forceinline size_t bytes() const {
112112
return numBytes;
113113
}
114+
115+
/*! returns the number of bytes of the buffer */
116+
__forceinline bool isShared() const {
117+
return shared;
118+
}
114119

115120
/*! returns true of the buffer is not empty */
116121
__forceinline operator bool() const {
@@ -215,6 +220,16 @@ namespace embree
215220
volatile int MAYBE_UNUSED w = *((int*)getPtr(size()-1)+3); // FIXME: is failing hard avoidable?
216221
}
217222

223+
/*! returns the buffer object */
224+
__forceinline Ref<Buffer> getBuffer() {
225+
return buffer;
226+
}
227+
228+
/*! returns the offset of the view from the base pointer */
229+
__forceinline size_t getOffset() const {
230+
return ptr_ofs - buffer->getPtr();
231+
}
232+
218233
public:
219234
char* ptr_ofs; //!< base pointer plus offset
220235
size_t stride; //!< stride of the buffer in bytes

kernels/common/rtcore.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,30 @@ RTC_NAMESPACE_BEGIN;
240240
return nullptr;
241241
}
242242

243+
RTC_API bool rtcIsBufferShared(RTCBuffer hbuffer)
244+
{
245+
Buffer* buffer = (Buffer*)hbuffer;
246+
RTC_CATCH_BEGIN;
247+
RTC_TRACE(rtcIsBufferShared);
248+
RTC_VERIFY_HANDLE(hbuffer);
249+
RTC_ENTER_DEVICE(hbuffer);
250+
return buffer->isShared();
251+
RTC_CATCH_END2(buffer);
252+
return false;
253+
}
254+
255+
RTC_API size_t rtcGetBufferSize(RTCBuffer hbuffer)
256+
{
257+
Buffer* buffer = (Buffer*)hbuffer;
258+
RTC_CATCH_BEGIN;
259+
RTC_TRACE(rtcGetBufferSize);
260+
RTC_VERIFY_HANDLE(hbuffer);
261+
RTC_ENTER_DEVICE(hbuffer);
262+
return buffer->bytes();
263+
RTC_CATCH_END2(buffer);
264+
return 0;
265+
}
266+
243267
RTC_API void* rtcGetBufferData(RTCBuffer hbuffer)
244268
{
245269
Buffer* buffer = (Buffer*)hbuffer;

0 commit comments

Comments
 (0)