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

Method run

tutorials/verify/verify.cpp:2557–2623  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2555 : VerifyApplication::IntersectTest(name,isa,imode,ivariant,VerifyApplication::TEST_SHOULD_PASS), sflags(sflags), quality(quality) {}
2556
2557 VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent)
2558 {
2559 std::string cfg = state->rtcore + ",isa="+stringOfISA(isa);
2560 RTCDeviceRef device = rtcNewDevice(cfg.c_str());
2561 errorHandler(nullptr,rtcGetDeviceError(device));
2562
2563 Vec3f vertices[5] = {
2564 Vec3f(0.0f,0.0f,0.0f),
2565 Vec3f(1.0f,0.0f,0.0f),
2566 Vec3f(1.0f,1.0f,0.0f),
2567 Vec3f(0.0f,1.0f,0.0f),
2568 Vec3f(zero) // dummy vertex for 16 byte padding
2569 };
2570 int quads[4] = {
2571 0,1,2,3
2572 };
2573 RTCSceneRef scene = rtcNewScene(device);
2574 rtcSetSceneFlags(scene,sflags.sflags);
2575 rtcSetSceneBuildQuality(scene,sflags.qflags);
2576
2577 RTCGeometry geom = rtcNewGeometry (device, RTC_GEOMETRY_TYPE_QUAD);
2578 rtcSetGeometryBuildQuality(geom, quality);
2579 rtcSetSharedGeometryBuffer(geom, RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, vertices , 0, sizeof(Vec3f), 4);
2580 rtcSetSharedGeometryBuffer(geom, RTC_BUFFER_TYPE_INDEX , 0, RTC_FORMAT_UINT4, quads, 0, 4*sizeof(int), 1);
2581 rtcCommitGeometry(geom);
2582 rtcAttachGeometry(scene,geom);
2583 rtcReleaseGeometry(geom);
2584 rtcCommitScene (scene);
2585 AssertNoError(device);
2586
2587 float u[256], v[256];
2588 RTCRayHit rays[256];
2589 for (size_t i=0; i<256; i++)
2590 {
2591 u[i] = random_float();
2592 v[i] = random_float();
2593 if (u[i] < 0.001f || v[i] < 0.001f || u[i] > 0.999f || v[i] > 0.999f) { u[i] = 0.333f; v[i] = 0.333f; } // avoid hitting edges
2594 Vec3fa from(0.0f,0.0f,-1.0f);
2595 Vec3fa to = vertices[0] + u[i]*(vertices[1]-vertices[0]) + v[i]*(vertices[3]-vertices[0]);
2596 rays[i] = makeRay(from,to-from);
2597 }
2598 IntersectWithMode(imode,ivariant,scene,rays,256);
2599
2600 for (size_t i=0; i<256; i++)
2601 {
2602 if (!(ivariant & VARIANT_INTERSECT))
2603 {
2604 if (rays[i].ray.tfar != float(neg_inf)) return VerifyApplication::FAILED;
2605 continue;
2606 }
2607 if (rays[i].hit.primID != 0) return VerifyApplication::FAILED;
2608 if (abs(rays[i].hit.u - u[i]) > 16.0f*float(ulp)) return VerifyApplication::FAILED;
2609 if (abs(rays[i].hit.v - v[i]) > 16.0f*float(ulp)) return VerifyApplication::FAILED;
2610 if (abs(rays[i].ray.tfar - 1.0f) > 16.0f*float(ulp)) return VerifyApplication::FAILED;
2611
2612 const Vec3fa org(rays[i].ray.org_x,rays[i].ray.org_y,rays[i].ray.org_z);
2613 const Vec3fa dir(rays[i].ray.dir_x,rays[i].ray.dir_y,rays[i].ray.dir_z);
2614 const Vec3fa ht = org + rays[i].ray.tfar*dir;

Callers

nothing calls this directly

Calls 15

stringOfISAFunction · 0.85
rtcNewDeviceFunction · 0.85
errorHandlerFunction · 0.85
rtcGetDeviceErrorFunction · 0.85
rtcNewSceneFunction · 0.85
rtcSetSceneFlagsFunction · 0.85
rtcSetSceneBuildQualityFunction · 0.85
rtcCommitGeometryFunction · 0.85
rtcAttachGeometryFunction · 0.85
rtcReleaseGeometryFunction · 0.85

Tested by

no test coverage detected