Fix DomeLight warning in console for Storm delegate. #55

Merged
Bogdan Nagirniak merged 5 commits from BLEN-432 into hydra-render 2023-06-13 19:13:36 +02:00
4 changed files with 52 additions and 9 deletions
Showing only changes of commit 8ae44f9aaa - Show all commits

View File

@ -29,6 +29,7 @@ set(INC
../../blenlib
../../depsgraph
../../blenkernel
../../imbuf
../../gpu
../../gpu/intern
../../python/intern

View File

@ -8,6 +8,8 @@
#include "BKE_image_save.h"
#include "BLI_fileops.h"
#include "BLI_path_util.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "DNA_windowmanager_types.h"
@ -16,18 +18,28 @@
namespace blender::render::hydra {
static std::string get_cache_file(const std::string &file_name, bool mkdir=true) {
char dir_path[FILE_MAX];
BLI_path_join(dir_path, sizeof(dir_path), BKE_tempdir_session(), "hydra_image_cache");
if (mkdir) {
BLI_dir_create_recursive(dir_path);
}
char file_path[FILE_MAX];
BLI_path_join(file_path, sizeof(file_path), dir_path, file_name.c_str());
return file_path;
}
static std::string cache_image_file(Image *image,
BlenderSceneDelegate *scene_delegate,
ImageUser *iuser,
bool check_exist)
{
char file_path[FILE_MAX];
char file_name[32];
snprintf(file_name, sizeof(file_name), "img_%016llx.hdr", (uintptr_t)image);
BLI_path_join(
file_path, sizeof(file_path), BKE_tempdir_session(), "hydra_image_cache", file_name);
if (check_exist && BLI_exists(file_path)) {
std::string file_path = get_cache_file(file_name);
if (check_exist && BLI_exists(file_path.c_str())) {
return file_path;
}
@ -37,17 +49,18 @@ static std::string cache_image_file(Image *image,
if (BKE_image_save_options_init(&opts, main, scene_delegate->scene, image, iuser, false, false))
{
STRNCPY(opts.filepath, file_path);
STRNCPY(opts.filepath, file_path.c_str());
if (BKE_image_save(nullptr, main, image, iuser, &opts)) {
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 1, "%s -> %s", image->id.name, file_path);
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 1, "%s -> %s", image->id.name, file_path.c_str());
}
else {
memset(file_path, 0, sizeof(file_path));
CLOG_ERROR(LOG_RENDER_HYDRA_SCENE, "Can't save %s", file_path.c_str());
file_path = "";
}
}
BKE_image_save_options_free(&opts);
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 2, "%s -> %s", image->id.name, file_path);
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 2, "%s -> %s", image->id.name, file_path.c_str());
return file_path;
}
@ -55,7 +68,7 @@ std::string cache_or_get_image_file(Image *image,
BlenderSceneDelegate *scene_delegate,
ImageUser *iuser)
{
std::string file_path(FILE_MAX, 0);
std::string file_path;
if (image->source == IMA_SRC_GENERATED) {
file_path = cache_image_file(image, scene_delegate, iuser, false);
}
@ -64,6 +77,7 @@ std::string cache_or_get_image_file(Image *image,
}
else {
Main *main = CTX_data_main(scene_delegate->context);
file_path.reserve(FILE_MAX);
BKE_image_user_file_path_ex(main, iuser, image, file_path.data(), false, true);
if (!pxr::HioImageRegistry::GetInstance().IsSupportedImageFile(file_path)) {
@ -75,4 +89,24 @@ std::string cache_or_get_image_file(Image *image,
return file_path;
}
std::string cache_image_color(float color[4], const std::string &name)
{
std::string file_path = get_cache_file(name + ".hdr");
ImBuf *ibuf = IMB_allocImBuf(4, 4, 32, IB_rectfloat);
IMB_rectfill(ibuf, color);
ibuf->ftype = IMB_FTYPE_RADHDR;
if (IMB_saveiff(ibuf, file_path.c_str(), IB_rectfloat)) {
CLOG_INFO(LOG_RENDER_HYDRA_SCENE, 1, "%s", file_path.c_str());
}
else {
CLOG_ERROR(LOG_RENDER_HYDRA_SCENE, "Can't save %s", file_path.c_str());
file_path = "";
}
IMB_freeImBuf(ibuf);
return file_path;
}
} // namespace blender::render::hydra

View File

@ -13,5 +13,6 @@ class BlenderSceneDelegate;
std::string cache_or_get_image_file(Image *image,
BlenderSceneDelegate *scene_delegate,
ImageUser *iuser);
std::string cache_image_color(float color[4], const std::string &name);
} // namespace blender::render::hydra

View File

@ -100,6 +100,13 @@ void WorldData::init()
data_[pxr::HdLightTokens->exposure] = world->exposure;
data_[pxr::HdLightTokens->color] = pxr::GfVec3f(world->horr, world->horg, world->horb);
}
if (data_.find(pxr::HdLightTokens->textureFile) == data_.end()) {
pxr::GfVec3f c = data_[pxr::HdLightTokens->color].Get<pxr::GfVec3f>();
float color[4] = {c[0], c[1], c[2], 1.0f};
std::string image_path = cache_image_color(color, "world");
data_[pxr::HdLightTokens->textureFile] = pxr::SdfAssetPath(image_path, image_path);
}
}
void WorldData::insert()