@@ -60,6 +60,9 @@ class Deferred2Pipeline(
6060 )
6161 val filterPass = TemporalFilterPass (size = size, pipeline = this )
6262
63+ internal val viewProjNoTsaa = MutableMat4f ()
64+ internal val invViewProjNoTsaa = MutableMat4f ()
65+
6366 private val swapListeners = BufferedList < () -> Unit > ()
6467 private val resizeListeners = BufferedList < (Vec2i ) -> Unit > ()
6568
@@ -86,14 +89,19 @@ class Deferred2Pipeline(
8689
8790 val offsetMat = MutableMat4f ()
8891 camera.onCameraUpdated + = {
92+ viewProjNoTsaa.set(camera.viewProj)
93+ invViewProjNoTsaa.set(camera.invViewProj)
94+
8995 val tsaa = tsaa
9096 if (tsaa.isNotEmpty()) {
9197 val offset = tsaa[Time .frameCount % tsaa.size]
9298 val width = it.viewport.width
9399 val height = it.viewport.height
94100 offsetMat.setIdentity().translate(offset.x / width, offset.y / height, 0f ).mul(camera.proj)
95101 camera.proj.set(offsetMat)
102+ camera.proj.mul(camera.view, camera.dataF.viewProj)
96103 camera.lazyInvProj.isDirty = true
104+ camera.dataF.lazyInvViewProj.isDirty = true
97105 }
98106 }
99107
@@ -122,7 +130,7 @@ class Deferred2Pipeline(
122130 set(it.view, camera.view)
123131 set(it.viewProj, camera.viewProj)
124132 set(it.invView, camera.invView)
125- set(it.invViewProj, camera.invViewProj )
133+ set(it.invViewProj, invViewProjNoTsaa )
126134 set(it.oldViewProj, reprojectMatrixComputePass.uploadData.oldVal.viewProjMat)
127135 set(it.camPosition, camera.globalPos)
128136 set(it.camNear, camera.clipNear)
0 commit comments