Skip to content

Commit

Permalink
Client: Set up a new frame uniform for fog parameters
Browse files Browse the repository at this point in the history
This is required to modify the fog effect for a given scene. Disabling the fog by setting the limits is a bit hacky, but no need to introduce a separate flag just for this...
  • Loading branch information
rdw-software committed Jan 31, 2024
1 parent 24a62fe commit dd24929
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
13 changes: 13 additions & 0 deletions Core/NativeClient/Renderer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -734,6 +734,19 @@ function Renderer:UpdateScenewideUniformBuffer(deltaTime)
perSceneUniformData.cameraWorldPosition.y = cameraWorldPosition.y
perSceneUniformData.cameraWorldPosition.z = cameraWorldPosition.z

if not self.fogParameters then
-- Disabling the effect in a roundabout way to avoid a new uniform just for this
perSceneUniformData.fogNearLimit = 10
perSceneUniformData.fogFarLimit = 1
else
local viewDistance = C_Camera.farPlaneDistanceInWorldUnits - C_Camera.nearPlaneDistanceInWorldUnits
perSceneUniformData.fogNearLimit = self.fogParameters.near * viewDistance
perSceneUniformData.fogFarLimit = self.fogParameters.far * viewDistance
perSceneUniformData.fogColorRed = self.fogParameters.color.red
perSceneUniformData.fogColorGreen = self.fogParameters.color.green
perSceneUniformData.fogColorBlue = self.fogParameters.color.blue
end

Queue:WriteBuffer(
Device:GetQueue(self.wgpuDevice),
self.cameraViewportUniform.buffer,
Expand Down
7 changes: 7 additions & 0 deletions Core/NativeClient/WebGPU/UniformBuffer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ local UniformBuffer = {
float directionalLightIntensity; // 192
Vector3D cameraWorldPosition; // 204
float padding[1]; // 208
float fogColorRed; // 212
float fogColorGreen; // 216
float fogColorBlue; // 220
float padding[1]; // 224
float fogNearLimit; // 228
float fogFarLimit; // 232
float padding[2]; // 240
// Padding needs to be updated whenever the struct changes!
} scenewide_uniform_t;
typedef struct PerMaterialData {
Expand Down

0 comments on commit dd24929

Please sign in to comment.