| 46 | RTCGeometry* instances = nullptr; |
| 47 | |
| 48 | unsigned int addTree(RTCScene scene_i, unsigned int tree_idx) |
| 49 | { |
| 50 | /* create a triangulated cube with 12 triangles and 8 vertices */ |
| 51 | RTCGeometry mesh = rtcNewGeometry(g_device, RTC_GEOMETRY_TYPE_TRIANGLE); |
| 52 | |
| 53 | const float* vertices = tree_vertices[tree_idx]; |
| 54 | const float* colors = tree_colors[tree_idx]; |
| 55 | const unsigned int* indices = tree_indices[tree_idx]; |
| 56 | unsigned int num_vertices = tree_num_vertices[tree_idx]; |
| 57 | unsigned int num_colors = tree_num_colors[tree_idx]; |
| 58 | unsigned int num_triangles = tree_num_triangles[tree_idx]; |
| 59 | |
| 60 | /* set vertices and vertex colors */ |
| 61 | RTCBuffer vertex_buffer = rtcNewSharedBufferHostDevice(g_device, (void *)vertices, 3*num_vertices*sizeof(float)); |
| 62 | rtcSetGeometryBuffer(mesh, RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, vertex_buffer, 0, 3*sizeof(float), num_vertices); |
| 63 | rtcCommitBuffer(vertex_buffer); |
| 64 | rtcReleaseBuffer(vertex_buffer); |
| 65 | |
| 66 | RTCBuffer index_buffer = rtcNewSharedBufferHostDevice(g_device, (void *)indices, 3*num_triangles*sizeof(unsigned int)); |
| 67 | rtcSetGeometryBuffer(mesh, RTC_BUFFER_TYPE_INDEX, 0, RTC_FORMAT_UINT3, index_buffer, 0, 3*sizeof(unsigned int), num_triangles); |
| 68 | rtcCommitBuffer(index_buffer); |
| 69 | rtcReleaseBuffer(index_buffer); |
| 70 | data.tree_triangles[tree_idx] = (Triangle*)rtcGetBufferDataDevice(index_buffer); |
| 71 | |
| 72 | /* create vertex color array */ |
| 73 | RTCBuffer color_buffer = rtcNewSharedBufferHostDevice(g_device, (void*)colors, 3*num_colors*sizeof(float)); |
| 74 | rtcSetGeometryVertexAttributeCount(mesh,1); |
| 75 | rtcSetGeometryBuffer(mesh, RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE, 0, RTC_FORMAT_FLOAT3, color_buffer, 0, 3*sizeof(float), num_colors); |
| 76 | rtcCommitBuffer(color_buffer); |
| 77 | rtcReleaseBuffer(color_buffer); |
| 78 | data.tree_vertex_colors[tree_idx] = (Vec3f*)rtcGetBufferDataDevice(color_buffer); |
| 79 | |
| 80 | g_memory_consumed += num_vertices * 3 * sizeof(float); |
| 81 | g_memory_consumed += num_triangles * 3 * sizeof(unsigned int); |
| 82 | g_memory_consumed += num_colors * 3 * sizeof(float); |
| 83 | |
| 84 | rtcCommitGeometry(mesh); |
| 85 | unsigned int geomID = rtcAttachGeometry(scene_i,mesh); |
| 86 | rtcReleaseGeometry(mesh); |
| 87 | return geomID; |
| 88 | } |
| 89 | |
| 90 | /* adds a ground plane to the scene */ |
| 91 | unsigned int addTerrain(RTCScene scene_i) |
no test coverage detected