MCPcopy Create free account
hub / github.com/RenderKit/embree / setBuffer

Method setBuffer

kernels/common/scene_points.cpp:38–83  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

36 }
37
38 void Points::setBuffer(RTCBufferType type,
39 unsigned int slot,
40 RTCFormat format,
41 const Ref<Buffer>& buffer,
42 size_t offset,
43 size_t stride,
44 unsigned int num)
45 {
46 /* verify that all accesses are 4 bytes aligned */
47 if ((type != RTC_BUFFER_TYPE_FLAGS) && (((size_t(buffer->getHostPtr()) + offset) & 0x3) || (stride & 0x3)))
48 throw_RTCError(RTC_ERROR_INVALID_OPERATION, "data must be 4 bytes aligned");
49
50 if (type == RTC_BUFFER_TYPE_VERTEX) {
51 if (format != RTC_FORMAT_FLOAT4)
52 throw_RTCError(RTC_ERROR_INVALID_OPERATION, "invalid vertex buffer format");
53
54 if (slot >= vertices.size())
55 throw_RTCError(RTC_ERROR_INVALID_ARGUMENT, "invalid vertex buffer slot");
56
57 vertices[slot].set(buffer, offset, stride, num, format);
58 vertices[slot].checkPadding16();
59 setNumPrimitives(num);
60 } else if (type == RTC_BUFFER_TYPE_NORMAL) {
61 if (getType() != GTY_ORIENTED_DISC_POINT)
62 throw_RTCError(RTC_ERROR_INVALID_ARGUMENT, "unknown buffer type");
63
64 if (format != RTC_FORMAT_FLOAT3)
65 throw_RTCError(RTC_ERROR_INVALID_OPERATION, "invalid normal buffer format");
66
67 if (slot >= normals.size())
68 throw_RTCError(RTC_ERROR_INVALID_OPERATION, "invalid normal buffer slot");
69
70 normals[slot].set(buffer, offset, stride, num, format);
71 normals[slot].checkPadding16();
72 } else if (type == RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE) {
73 if (format < RTC_FORMAT_FLOAT || format > RTC_FORMAT_FLOAT16)
74 throw_RTCError(RTC_ERROR_INVALID_OPERATION, "invalid vertex attribute buffer format");
75
76 if (slot >= vertexAttribs.size())
77 throw_RTCError(RTC_ERROR_INVALID_OPERATION, "invalid vertex attribute buffer slot");
78
79 vertexAttribs[slot].set(buffer, offset, stride, num, format);
80 vertexAttribs[slot].checkPadding16();
81 } else
82 throw_RTCError(RTC_ERROR_INVALID_ARGUMENT, "unknown buffer type");
83 }
84
85 void* Points::getBufferData(RTCBufferType type, unsigned int slot, BufferDataPointerType pointerType)
86 {

Calls 5

getTypeFunction · 0.85
getHostPtrMethod · 0.80
checkPadding16Method · 0.80
sizeMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected