36 halp_meta(name,
"Cubemap Loader")
37 halp_meta(category,
"Visuals/3D")
38 halp_meta(c_name,
"cubemap_loader")
41 "https://ossia.io/score-docs/processes/cubemap-loader.html")
42 halp_meta(uuid,
"b8d4f9e2-6c3a-4b0f-9e4d-2a7f0c5b3d6e")
50 struct image_t : halp::file_port<"Image", halp::mmap_file_view>
57 "Images (*.png *.jpg *.jpeg *.bmp *.tga *.webp *.tif *.tiff)");
58 static std::function<void(
CubemapLoader&)> process(file_type data)
61 if(!data.bytes.empty())
64 reinterpret_cast<const uchar*
>(data.bytes.data()),
65 (
int)data.bytes.size());
67 if(img.isNull() && !data.filename.empty())
69 img = QImage(data.filename.data());
75 qWarning() <<
"CubemapLoader: failed to decode environment image"
76 << data.filename.data()
77 <<
"- unsupported or corrupt format (HDR/EXR float"
78 " formats are not supported)";
80 else if(img.format() != QImage::Format_RGBA8888)
81 img = img.convertToFormat(QImage::Format_RGBA8888);
83 self.m_loadedImage = std::move(img);
84 self.m_imageChanged =
true;
89 struct : halp::enum_t<CubemapLayout,
"Layout">
91 void update(
CubemapLoader& self) { self.m_imageChanged =
true; }
94 struct : halp::spinbox_i32<
"Resolution", halp::range{16, 8192, 512}>
96 void update(CubemapLoader& self) { self.m_imageChanged =
true; }
106 halp::gpu_cubemap_output<
"Cubemap"> cubemap;
116 halp_meta(name,
"Scene");
117 ossia::scene_spec scene;
124 std::shared_ptr<ossia::scene_state> m_sceneState;
125 int64_t m_sceneVersion{0};
126 void* m_lastPublishedHandle{};
129 QRhiTexture* m_cubemapTex{};
130 QRhiTexture* m_equirectTex{};
131 QRhiSampler* m_equirectSampler{};
136 QRhiTextureRenderTarget* renderTarget{};
137 QRhiRenderPassDescriptor* renderPass{};
140 QRhiGraphicsPipeline* m_equirectPipeline{};
141 QRhiShaderResourceBindings* m_equirectSrb{};
142 QRhiBuffer* m_equirectUbo{};
143 QRhiBuffer* m_quadVbuf{};
148 quint32 m_equirectUboStride{0};
151 bool m_imageChanged{
true};
152 QImage m_loadedImage;
154 void operator()() { }
171 void runInitialPasses(
176 bool createCubemapTexture(QRhi& rhi,
int faceSize);
177 void releaseCubemapTexture();
187 void uploadCrossOrStrip(QRhiResourceUpdateBatch* res);
188 void renderEquirectangular(
190 QRhiResourceUpdateBatch*& res);
195 QImage extractFace(
int faceIndex)
const;