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

Method run

tutorials/verify/verify.cpp:2479–2546  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2477 }
2478
2479 VerifyApplication::TestReturnValue run(VerifyApplication* state, bool silent)
2480 {
2481 std::string cfg = state->rtcore + ",isa="+stringOfISA(isa);
2482 RTCDeviceRef device = rtcNewDevice(cfg.c_str());
2483 errorHandler(nullptr,rtcGetDeviceError(device));
2484
2485 Vec3f vertices[4] = {
2486 Vec3f(0.0f,0.0f,0.0f),
2487 Vec3f(1.0f,0.0f,0.0f),
2488 Vec3f(0.0f,1.0f,0.0f),
2489 Vec3f(zero) // dummy vertex for 16 byte padding
2490 };
2491 Triangle triangles[1] = {
2492 Triangle(0,1,2)
2493 };
2494 RTCSceneRef scene = rtcNewScene(device);
2495 rtcSetSceneFlags(scene,sflags.sflags);
2496 rtcSetSceneBuildQuality(scene,sflags.qflags);
2497
2498 RTCGeometry geom = rtcNewGeometry (device, RTC_GEOMETRY_TYPE_TRIANGLE);
2499 rtcSetGeometryBuildQuality(geom,quality);
2500 rtcSetSharedGeometryBuffer(geom, RTC_BUFFER_TYPE_VERTEX, 0, RTC_FORMAT_FLOAT3, vertices , 0, sizeof(Vec3f), 3);
2501 rtcSetSharedGeometryBuffer(geom, RTC_BUFFER_TYPE_INDEX , 0, RTC_FORMAT_UINT3, triangles, 0, sizeof(Triangle), 1);
2502 rtcCommitGeometry(geom);
2503 rtcAttachGeometry(scene,geom);
2504 rtcReleaseGeometry(geom);
2505 rtcCommitScene (scene);
2506 AssertNoError(device);
2507
2508 float u[256], v[256];
2509 RTCRayHit rays[256];
2510 for (size_t i=0; i<256; i++)
2511 {
2512 u[i] = random_float();
2513 v[i] = random_float();
2514 Vec3fa from(0.0f,0.0f,-1.0f);
2515 Vec3fa to = uniformSampleTriangle(vertices[1],vertices[2],vertices[0],u[i],v[i]);
2516 rays[i] = makeRay(from,to-from);
2517 }
2518 IntersectWithMode(imode,ivariant,scene,rays,256);
2519
2520 for (size_t i=0; i<256; i++)
2521 {
2522
2523 if (!(ivariant & VARIANT_INTERSECT))
2524 {
2525 if (rays[i].ray.tfar != float(neg_inf)) return VerifyApplication::FAILED;
2526 continue;
2527 }
2528
2529
2530 if (rays[i].hit.geomID != 0) return VerifyApplication::FAILED;
2531 if (rays[i].hit.primID != 0) return VerifyApplication::FAILED;
2532 if (abs(rays[i].hit.u - u[i]) > 16.0f*float(ulp)) return VerifyApplication::FAILED;
2533 if (abs(rays[i].hit.v - v[i]) > 16.0f*float(ulp)) return VerifyApplication::FAILED;
2534 if (abs(rays[i].ray.tfar - 1.0f) > 16.0f*float(ulp)) return VerifyApplication::FAILED;
2535 const Vec3fa org(rays[i].ray.org_x,rays[i].ray.org_y,rays[i].ray.org_z);
2536 const Vec3fa dir(rays[i].ray.dir_x,rays[i].ray.dir_y,rays[i].ray.dir_z);

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