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

Function device_init

tutorials/closest_point/closest_point_device.cpp:583–670  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

581
582/* called by the C++ code for initialization */
583extern "C" void device_init (char* cfg)
584{
585 /* create scene data */
586 g_triangle_meshes[0] = createPlane(
587 AffineSpace3fa::translate(Vec3fa(0.f, -3.f, 0.f)) *
588 AffineSpace3fa::scale(Vec3fa(10.f, 4.f, 4.f)) *
589 AffineSpace3fa::rotate(Vec3fa(1.f, 0.f, 0.f), float(pi)/2) *
590 AffineSpace3fa::translate(Vec3fa(-0.5f, -0.5f, 0.f)),
591 1);
592 g_triangle_meshes[1] = createPlane(
593 AffineSpace3fa::translate(Vec3fa(0.f, -1.f, 2.f)) *
594 AffineSpace3fa::scale(Vec3fa(10.f, 4.f, 4.f)) *
595 AffineSpace3fa::translate(Vec3fa(-0.5f, -0.5f, 0.f)),
596 8);
597 g_triangle_meshes[2] = createTriangulatedSphere(Vec3fa(3.f, -2.f, 0.0f), 1.f);
598 g_triangle_meshes[3] = createCube(Vec3fa(-3.f, -2.f, 0), 1.0f);
599
600 /* create embree scene */
601 g_sceneEmbreeInstance = rtcNewScene(g_device);
602 g_sceneUserDefinedInstance = rtcNewScene(g_device);
603
604 /* create scene that will be instanced */
605 g_scene1 = rtcNewScene(g_device);
606
607 // add the four objects to all three scenes
608 {
609 RTCScene scenes[] = { g_scene1, g_sceneEmbreeInstance, g_sceneUserDefinedInstance };
610 for (int m = 0; m < 4; ++m)
611 for (RTCScene scene : scenes)
612 {
613 RTCGeometry geom = rtcNewGeometry (g_device, RTC_GEOMETRY_TYPE_TRIANGLE);
614 rtcSetGeometryPointQueryFunction(geom, closestPointFunc);
615 rtcCommitGeometry(geom);
616 rtcSetSharedGeometryBuffer(geom,RTC_BUFFER_TYPE_VERTEX,0,RTC_FORMAT_FLOAT3,g_triangle_meshes[m]->vertices, 0,sizeof(Vertex), g_triangle_meshes[m]->num_vertices);
617 rtcSetSharedGeometryBuffer(geom,RTC_BUFFER_TYPE_INDEX, 0,RTC_FORMAT_UINT3, g_triangle_meshes[m]->triangles,0,sizeof(Triangle),g_triangle_meshes[m]->num_triangles);
618 rtcAttachGeometryByID(scene, geom, m);
619 rtcReleaseGeometry(geom);
620 rtcCommitGeometry(geom);
621 rtcCommitScene(scene);
622 }
623 }
624
625 /* compute bounding box of the scene that will be instanced */
626 Vec3f bbmin(inf);
627 Vec3f bbmax(neg_inf);
628 for (int i = 0; i < 4; ++i) {
629 TriangleMesh* mesh = g_triangle_meshes[i];
630 for (unsigned int v = 0; v < mesh->num_vertices; ++v) {
631 Vertex* vert = mesh->vertices+v;
632 bbmin = min(bbmin, Vec3f(vert->x, vert->y, vert->z));
633 bbmax = max(bbmax, Vec3f(vert->x, vert->y, vert->z));
634 }
635 }
636
637 /* instantiate geometry */
638 for (unsigned int i = 0; i < 3; ++i) {
639 g_instanceEmbree[i] = rtcNewGeometry (g_device, RTC_GEOMETRY_TYPE_INSTANCE);
640 rtcSetGeometryInstancedScene(g_instanceEmbree[i], g_scene1);

Callers

nothing calls this directly

Calls 15

createPlaneFunction · 0.85
rotateFunction · 0.85
createCubeFunction · 0.85
rtcNewSceneFunction · 0.85
rtcCommitGeometryFunction · 0.85
rtcAttachGeometryByIDFunction · 0.85
rtcReleaseGeometryFunction · 0.85
rtcCommitSceneFunction · 0.85

Tested by

no test coverage detected