summaryrefslogtreecommitdiffstats
path: root/drivers/gles2/shaders/copy.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gles2/shaders/copy.glsl')
-rw-r--r--drivers/gles2/shaders/copy.glsl63
1 files changed, 60 insertions, 3 deletions
diff --git a/drivers/gles2/shaders/copy.glsl b/drivers/gles2/shaders/copy.glsl
index a21da68525..feaeb2152b 100644
--- a/drivers/gles2/shaders/copy.glsl
+++ b/drivers/gles2/shaders/copy.glsl
@@ -9,11 +9,20 @@ precision mediump int;
#endif
attribute highp vec4 vertex_attrib; // attrib:0
+
+#if defined(USE_CUBEMAP) || defined(USE_PANORAMA)
+attribute vec3 cube_in; // attrib:4
+#else
attribute vec2 uv_in; // attrib:4
+#endif
+
attribute vec2 uv2_in; // attrib:5
+#if defined(USE_CUBEMAP) || defined(USE_PANORAMA)
+varying vec3 cube_interp;
+#else
varying vec2 uv_interp;
-
+#endif
varying vec2 uv2_interp;
#ifdef USE_COPY_SECTION
@@ -22,7 +31,12 @@ uniform vec4 copy_section;
void main() {
+#if defined(USE_CUBEMAP) || defined(USE_PANORAMA)
+ cube_interp = cube_in;
+#else
uv_interp = uv_in;
+#endif
+
uv2_interp = uv2_in;
gl_Position = vertex_attrib;
@@ -34,6 +48,8 @@ void main() {
[fragment]
+#define M_PI 3.14159265359
+
#ifdef USE_GLES_OVER_GL
#define mediump
#define highp
@@ -42,21 +58,59 @@ precision mediump float;
precision mediump int;
#endif
-
+#if defined(USE_CUBEMAP) || defined(USE_PANORAMA)
+varying vec3 cube_interp;
+#else
varying vec2 uv_interp;
+#endif
+
+#ifdef USE_CUBEMAP
+uniform samplerCube source_cube; // texunit:0
+#else
uniform sampler2D source; // texunit:0
+#endif
varying vec2 uv2_interp;
+#ifdef USE_MULTIPLIER
+uniform float multiplier;
+#endif
+
#ifdef USE_CUSTOM_ALPHA
uniform float custom_alpha;
#endif
+#if defined(USE_PANORAMA) || defined(USE_ASYM_PANO)
+
+vec4 texturePanorama(sampler2D pano, vec3 normal) {
+
+ vec2 st = vec2(
+ atan(normal.x, normal.z),
+ acos(normal.y)
+ );
+
+ if(st.x < 0.0)
+ st.x += M_PI*2.0;
+
+ st/=vec2(M_PI*2.0,M_PI);
+
+ return texture2D(pano,st);
+
+}
+
+#endif
void main() {
- //vec4 color = color_interp;
+#ifdef USE_PANORAMA
+
+ vec4 color = texturePanorama(source, normalize(cube_interp));
+
+#elif defined(USE_CUBEMAP)
+ vec4 color = textureCube(source_cube, normalize(cube_interp));
+#else
vec4 color = texture2D( source, uv_interp );
+#endif
#ifdef USE_NO_ALPHA
@@ -67,6 +121,9 @@ void main() {
color.a=custom_alpha;
#endif
+#ifdef USE_MULTIPLIER
+ color.rgb *= multiplier;
+#endif
gl_FragColor = color;
}