Fix multiview use in techniques

This commit is contained in:
Mads Buvik Sandvei 2025-01-26 16:23:56 +01:00
parent 6071de9d1d
commit a2f5e1c075
5 changed files with 22 additions and 9 deletions

View File

@ -81,6 +81,7 @@ namespace fx
#define omw_Position @position
#define omw_Texture1D @texture1D
#define omw_Texture2D @texture2D
#define omw_Texture2DArray @texture2DArray
#define omw_Texture3D @texture3D
#define omw_Vertex @vertex
#define omw_FragColor @fragColor
@ -154,7 +155,7 @@ mat4 omw_InvProjectionMatrix()
float omw_GetDepth(vec2 uv)
{
#if OMW_MULTIVIEW
float depth = omw_Texture2D(omw_SamplerDepth, vec3(uv, gl_ViewID_OVR)).r;
float depth = omw_Texture2DArray(omw_SamplerDepth, vec3(uv, gl_ViewID_OVR)).r;
#else
float depth = omw_Texture2D(omw_SamplerDepth, uv).r;
#endif
@ -165,10 +166,19 @@ mat4 omw_InvProjectionMatrix()
#endif
}
vec4 omw_GetDistortion(vec2 uv)
{
#if OMW_MULTIVIEW
return omw_Texture2DArray(omw_SamplerDistortion, vec3(uv, gl_ViewID_OVR));
#else
return omw_Texture2D(omw_SamplerDistortion, uv);
#endif
}
vec4 omw_GetLastShader(vec2 uv)
{
#if OMW_MULTIVIEW
return omw_Texture2D(omw_SamplerLastShader, vec3(uv, gl_ViewID_OVR));
return omw_Texture2DArray(omw_SamplerLastShader, vec3(uv, gl_ViewID_OVR));
#else
return omw_Texture2D(omw_SamplerLastShader, uv);
#endif
@ -177,7 +187,7 @@ mat4 omw_InvProjectionMatrix()
vec4 omw_GetLastPass(vec2 uv)
{
#if OMW_MULTIVIEW
return omw_Texture2D(omw_SamplerLastPass, vec3(uv, gl_ViewID_OVR));
return omw_Texture2DArray(omw_SamplerLastPass, vec3(uv, gl_ViewID_OVR));
#else
return omw_Texture2D(omw_SamplerLastPass, uv);
#endif
@ -186,7 +196,7 @@ mat4 omw_InvProjectionMatrix()
vec3 omw_GetNormals(vec2 uv)
{
#if OMW_MULTIVIEW
return omw_Texture2D(omw_SamplerNormals, vec3(uv, gl_ViewID_OVR)).rgb * 2.0 - 1.0;
return omw_Texture2DArray(omw_SamplerNormals, vec3(uv, gl_ViewID_OVR)).rgb * 2.0 - 1.0;
#else
return omw_Texture2D(omw_SamplerNormals, uv).rgb * 2.0 - 1.0;
#endif
@ -275,6 +285,9 @@ float omw_EstimateFogCoverageFromUV(vec2 uv)
{ "@hdr", technique.getHDR() ? "1" : "0" }, { "@in", mLegacyGLSL ? "varying" : "in" },
{ "@out", mLegacyGLSL ? "varying" : "out" }, { "@position", "gl_Position" },
{ "@texture1D", mLegacyGLSL ? "texture1D" : "texture" },
// Note, @texture2DArray must be defined before @texture2D since @texture2D is a perfect prefix of
// texture2DArray
{ "@texture2DArray", mLegacyGLSL ? "texture2DArray" : "texture" },
{ "@texture2D", mLegacyGLSL ? "texture2D" : "texture" },
{ "@texture3D", mLegacyGLSL ? "texture3D" : "texture" },
{ "@vertex", mLegacyGLSL ? "gl_Vertex" : "_omw_Vertex" },

View File

@ -85,7 +85,7 @@ namespace fx
mDescription = {};
mVersion = {};
mGLSLExtensions.clear();
mGLSLVersion = mUBO ? 330 : 120;
mGLSLVersion = (mUBO || Stereo::getMultiview()) ? 330 : 120;
mGLSLProfile.clear();
mDynamic = false;
}

View File

@ -6,11 +6,11 @@ fragment main {
{
const float multiplier = 0.14;
vec2 offset = omw_Texture2D(omw_SamplerDistortion, omw_TexCoord).rg;
vec2 offset = omw_GetDistortion(omw_TexCoord).rg;
offset *= multiplier;
offset = clamp(offset, vec2(-1.0), vec2(1.0));
float occlusionFactor = omw_Texture2D(omw_SamplerDistortion, omw_TexCoord+offset).b;
float occlusionFactor = omw_GetDistortion(omw_TexCoord+offset).b;
omw_FragColor = mix(omw_GetLastShader(omw_TexCoord + offset), omw_GetLastShader(omw_TexCoord), occlusionFactor);
}

View File

@ -1,4 +1,4 @@
#version 120
#version 330
#extension GL_EXT_texture_array : require
varying vec2 uv;

View File

@ -50,5 +50,5 @@ uniform sampler2DArray opaqueDepthTex;
vec4 sampleOpaqueDepthTex(vec2 uv)
{
return texture2DArray(opaqueDepthTex, vec3((uv), gl_ViewID_OVR));
return texture(opaqueDepthTex, vec3((uv), gl_ViewID_OVR));
}