1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-25 16:43:33 +00:00
OpenMW/files/shaders/multiview_fragment.glsl
madsbuvi dd5901d351 Initial commit
Multiview shaders.

Refactor Frustum management

Rewrite shared shadow map

cull mask should respect stereo

Stereo savegame screencap

LocalMap refactoring

use the vertex buffer hint instead of the display list patch to enable/disable display lists

Character preview fixes
2022-04-28 21:05:34 +02:00

48 lines
1.8 KiB
GLSL

#ifndef MULTIVIEW_FRAGMENT
#define MULTIVIEW_FRAGMENT
// This file either enables or disables GL_OVR_multiview2 related code.
// For use in fragment shaders
// REQUIREMENT:
// GLSL version: 330 or greater
// GLSL profile: compatibility
// NOTE: If stereo is enabled using Misc::StereoView::shaderStereoDefines, version 330 compatibility (or greater) will be set.
//
// This file provides symbols for sampling stereo-aware textures. Without multiview, these texture uniforms are sampler2D,
// while in stereo the same uniforms are sampler2DArray instead. The symbols defined in this file mask this difference, allowing
// the same code to work in both cases. Use mw_stereoAwareSampler2D and mw_stereoAwareTexture2D, where you otherwise would use
// sampler2D and texture2D()
//
// USAGE:
// For stereo-aware textures, such as reflections, use the mw_stereoAwareSampler2D sampler and mw_stereoAwareTexture2D method
// instead of the usual sampler2D and texture2D.
//
// Using water reflection as an example, the old code for these textures changes from
// uniform sampler2D reflectionMap;
// ...
// vec3 reflection = texture2D(reflectionMap, screenCoords + screenCoordsOffset).rgb;
//
// to
// uniform mw_stereoAwareSampler2D reflectionMap;
// ...
// vec3 reflection = mw_stereoAwareTexture2D(reflectionMap, screenCoords + screenCoordsOffset).rgb;
//
#if @useOVR_multiview
#extension GL_OVR_multiview : require
#extension GL_OVR_multiview2 : require
#extension GL_EXT_texture_array : require
#define mw_stereoAwareSampler2D sampler2DArray
#define mw_stereoAwareTexture2D(texture, uv) texture2DArray(texture, vec3((uv), gl_ViewID_OVR))
#else // useOVR_multiview
#define mw_stereoAwareSampler2D sampler2D
#define mw_stereoAwareTexture2D(texture, uv) texture2D(texture, uv)
#endif // useOVR_multiview
#endif // MULTIVIEW_FRAGMENT