WIP multiple probes support
This commit is contained in:
parent
88115cfedd
commit
2dd7ad8eb2
11 changed files with 153 additions and 11 deletions
|
|
@ -12,3 +12,20 @@ struct LightProbeTarget
|
|||
{
|
||||
int index = 0; // parameter for renderstate.SetLightProbe
|
||||
};
|
||||
|
||||
class LightProbeIncrementalBuilder
|
||||
{
|
||||
int lastIndex = 0;
|
||||
|
||||
int collected;
|
||||
|
||||
TArray<uint16_t> irradianceMaps;
|
||||
TArray<uint16_t> prefilterMaps;
|
||||
|
||||
public:
|
||||
|
||||
void Step(const TArray<LightProbe>& probes, std::function<void(const LightProbe&, TArray<uint16_t>&, TArray<uint16_t>&)> renderScene, std::function<void(TArray<uint16_t>&&, TArray<uint16_t>&&)> uploadEnv);
|
||||
void Full(const TArray<LightProbe>& probes, std::function<void(const LightProbe&, TArray<uint16_t>&, TArray<uint16_t>&)> renderScene, std::function<void(TArray<uint16_t>&&, TArray<uint16_t>&&)> uploadEnv);
|
||||
|
||||
auto GetStep() const { return lastIndex; }
|
||||
};
|
||||
|
|
@ -221,7 +221,8 @@ public:
|
|||
// Get the array index for the material in the textures array accessible from shaders
|
||||
virtual int GetBindlessTextureIndex(FMaterial* material, int clampmode, int translation) { return -1; }
|
||||
|
||||
virtual void RenderEnvironmentMap(std::function<void(IntRect& bounds, int side)> renderFunc) {}
|
||||
virtual void RenderEnvironmentMap(std::function<void(IntRect& bounds, int side)> renderFunc, TArray<uint16_t>& irradianceMap, TArray<uint16_t>& prefilterMap) {}
|
||||
virtual void UploadEnvironmentMaps(int cubemapCount, TArray<uint16_t>&& irradianceMaps, TArray<uint16_t>&& prefilterMaps) {}
|
||||
|
||||
// Screen wiping
|
||||
virtual FTexture *WipeStartScreen();
|
||||
|
|
|
|||
|
|
@ -420,7 +420,7 @@ void VkTextureManager::CreatePrefiltermap(int size, int count, TArray<uint16_t>&
|
|||
.Execute(cmdbuffer);
|
||||
|
||||
int offset = 0;
|
||||
for (int i = 0; i < 6; ++i)
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
for (int level = 0; level < miplevels; level++)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -321,13 +321,18 @@ void VulkanRenderDevice::RenderTextureView(FCanvasTexture* tex, std::function<vo
|
|||
tex->SetUpdated(true);
|
||||
}
|
||||
|
||||
void VulkanRenderDevice::RenderEnvironmentMap(std::function<void(IntRect& bounds, int side)> renderFunc)
|
||||
void VulkanRenderDevice::RenderEnvironmentMap(std::function<void(IntRect& bounds, int side)> renderFunc, TArray<uint16_t>& irradianceMap, TArray<uint16_t>& prefilterMap)
|
||||
{
|
||||
mLightprober->RenderEnvironmentMap(std::move(renderFunc));
|
||||
TArray<uint16_t> irradianceMap = mLightprober->GenerateIrradianceMap();
|
||||
TArray<uint16_t> prefilterMap = mLightprober->GeneratePrefilterMap();
|
||||
mTextureManager->CreateIrradiancemap(32, 6, std::move(irradianceMap));
|
||||
mTextureManager->CreatePrefiltermap(128, 6, std::move(prefilterMap));
|
||||
irradianceMap = mLightprober->GenerateIrradianceMap();
|
||||
prefilterMap = mLightprober->GeneratePrefilterMap();
|
||||
|
||||
}
|
||||
|
||||
void VulkanRenderDevice::UploadEnvironmentMaps(int cubemapCount, TArray<uint16_t>&& irradianceMaps, TArray<uint16_t>&& prefilterMaps)
|
||||
{
|
||||
mTextureManager->CreateIrradiancemap(32, 6 * cubemapCount, std::move(irradianceMaps));
|
||||
mTextureManager->CreatePrefiltermap(128, 6 * cubemapCount, std::move(prefilterMaps));
|
||||
}
|
||||
|
||||
void VulkanRenderDevice::PostProcessScene(bool swscene, int fixedcm, float flash, const std::function<void()> &afterBloomDrawEndScene2D)
|
||||
|
|
|
|||
|
|
@ -104,7 +104,8 @@ public:
|
|||
|
||||
private:
|
||||
void RenderTextureView(FCanvasTexture* tex, std::function<void(IntRect &)> renderFunc) override;
|
||||
void RenderEnvironmentMap(std::function<void(IntRect& bounds, int side)> renderFunc) override;
|
||||
void RenderEnvironmentMap(std::function<void(IntRect& bounds, int side)> renderFunc, TArray<uint16_t>& irradianceMap, TArray<uint16_t>& prefilterMap) override;
|
||||
void UploadEnvironmentMaps(int cubemapCount, TArray<uint16_t>&& irradianceMaps, TArray<uint16_t>&& prefilterMaps) override;
|
||||
void PrintStartupLog();
|
||||
void CopyScreenToBuffer(int w, int h, uint8_t *data) override;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue