| 1271 | } |
| 1272 | |
| 1273 | void MeshBaker::Initialize(const BakeInputData& inputData) |
| 1274 | { |
| 1275 | input = inputData; |
| 1276 | for(uint64 i = 0; i < AppSettings::NumCubeMaps; ++i) |
| 1277 | GetTextureData(input.Device, input.EnvMaps[i], input.EnvMapData[i]); |
| 1278 | |
| 1279 | // Init embree |
| 1280 | rtcDevice = rtcNewDevice(); |
| 1281 | RTCError embreeError = rtcDeviceGetError(rtcDevice); |
| 1282 | if(embreeError == RTC_UNSUPPORTED_CPU) |
| 1283 | throw Exception(L"Your CPU does not meet the minimum requirements for embree"); |
| 1284 | else if(embreeError != RTC_NO_ERROR) |
| 1285 | throw Exception(L"Failed to initialize embree!"); |
| 1286 | |
| 1287 | // Build the BVHs |
| 1288 | BuildBVH(*input.SceneModel, sceneBVH, input.Device, rtcDevice); |
| 1289 | |
| 1290 | renderSampleMode = AppSettings::RenderSampleMode; |
| 1291 | numRenderSamples = AppSettings::NumRenderSamples; |
| 1292 | |
| 1293 | bakeSampleMode = AppSettings::BakeSampleMode; |
| 1294 | numBakeSamples = AppSettings::NumBakeSamples; |
| 1295 | |
| 1296 | numThreads = GetNumThreads(); |
| 1297 | renderSamples.resize(numThreads); |
| 1298 | bakeSamples.resize(numThreads); |
| 1299 | |
| 1300 | for(uint64 i = 0; i < numThreads; ++i) |
| 1301 | { |
| 1302 | GenerateIntegrationSamples(renderSamples[i], numRenderSamples, TileSize, TileSize, |
| 1303 | renderSampleMode, NumIntegrationTypes, rng); |
| 1304 | |
| 1305 | GenerateIntegrationSamples(bakeSamples[i], numBakeSamples, BakeGroupSize, 1, |
| 1306 | bakeSampleMode, NumIntegrationTypes, rng); |
| 1307 | } |
| 1308 | |
| 1309 | initialized = true; |
| 1310 | } |
| 1311 | |
| 1312 | void MeshBaker::Shutdown() |
| 1313 | { |
no test coverage detected