Skip to content

Commit

Permalink
Add more parameter checks
Browse files Browse the repository at this point in the history
  • Loading branch information
dtarakanov1 committed Sep 18, 2018
1 parent 44b553a commit 6ea2068
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 27 deletions.
80 changes: 55 additions & 25 deletions BaikalDataGenerator/Source/data_generator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ THE SOFTWARE.

#include "data_generator.h"

#include "devices.h"
#include "render.h"
#include "utils.h"

Expand All @@ -37,21 +38,65 @@ try
return kDataGeneratorBadParams;
}

std::filesystem::path output_dir = params->output_dir;
auto* scene = SceneObject::Cast<SceneObject>(params->scene);
if (scene == nullptr)
{
return kDataGeneratorBadScene;
}
if (params->scene_name == nullptr)
{
return kDataGeneratorBadSceneName;
}

if (!exists(output_dir))
if (params->cameras == nullptr || params->cameras_num == 0)
{
std::filesystem::create_directory(output_dir);
return kDataGeneratorBadCameras;
}
else if (!std::filesystem::is_directory(output_dir))

if (params->lights == nullptr || params->lights_num == 0)
{
return kDataGeneratorBadOutputDir;
return kDataGeneratorBadLights;
}

auto* scene = SceneObject::Cast<SceneObject>(params->scene);
if (scene == nullptr)
if (params->spp == nullptr || params->spp_num == 0)
{
return kDataGeneratorBadScene;
return kDataGeneratorBadSpp;
}
std::vector<size_t> sorted_spp(params->spp, params->spp + params->spp_num);
std::sort(sorted_spp.begin(), sorted_spp.end());
sorted_spp.erase(std::unique(sorted_spp.begin(), sorted_spp.end()), sorted_spp.end());
if (sorted_spp.front() == 0)
{
return kDataGeneratorBadSpp;
}

if (params->width == 0 || params->height == 0)
{
return kDataGeneratorBadImgSize;
}

if (params->bounces_num == 0)
{
return kDataGeneratorBadBouncesNum;
}

if (params->device_idx >= GetDevices().size())
{
return kDataGeneratorBadDeviceIdx;
}

if (params->output_dir == nullptr)
{
return kDataGeneratorBadOutputDir;
}
std::filesystem::path output_dir = params->output_dir;
if (!exists(output_dir))
{
create_directory(output_dir);
}
else if (!is_directory(output_dir))
{
return kDataGeneratorBadOutputDir;
}

Render render(scene,
Expand All @@ -65,26 +110,11 @@ try
auto* light = LightObject::Cast<LightObject>(params->lights[i]);
if (light == nullptr)
{
return kDataGeneratorBadLight;
return kDataGeneratorBadLights;
}
render.AttachLight(light);
}

if (params->spp_num == 0)
{
return kDataGeneratorBadSpp;
}

std::vector<size_t> sorted_spp(params->spp, params->spp + params->spp_num);
std::sort(sorted_spp.begin(), sorted_spp.end());

sorted_spp.erase(std::unique(sorted_spp.begin(), sorted_spp.end()), sorted_spp.end());

if (sorted_spp.front() <= 0)
{
return kDataGeneratorBadSpp;
}

unsigned camera_end_idx = params->cameras_start_idx + params->cameras_num - 1;

render.SaveMetadata(output_dir,
Expand All @@ -99,7 +129,7 @@ try
auto* camera = CameraObject::Cast<CameraObject>(params->cameras[i]);
if (camera == nullptr)
{
return kDataGeneratorBadCamera;
return kDataGeneratorBadCameras;
}
int camera_idx = params->cameras_start_idx + params->cameras_offset_idx + i;
render.GenerateSample(camera,
Expand Down
8 changes: 6 additions & 2 deletions BaikalDataGenerator/Source/data_generator.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,13 @@ enum DataGeneratorResult
kDataGeneratorBadParams,
kDataGeneratorBadOutputDir,
kDataGeneratorBadScene,
kDataGeneratorBadLight,
kDataGeneratorBadSceneName,
kDataGeneratorBadCameras,
kDataGeneratorBadLights,
kDataGeneratorBadSpp,
kDataGeneratorBadCamera,
kDataGeneratorBadImgSize,
kDataGeneratorBadBouncesNum,
kDataGeneratorBadDeviceIdx,
kDataGeneratorUnknownError,
};

Expand Down

0 comments on commit 6ea2068

Please sign in to comment.