[Bf-blender-cvs] [70dee80] input_method_editor: Fix T42622, environment texture GLSL result different from rendering.

Antony Riakiotakis noreply at git.blender.org
Mon Nov 24 00:45:09 CET 2014


Commit: 70dee80a8b74ce0a16f2d7d1bad30fa6a1f66fd9
Author: Antony Riakiotakis
Date:   Thu Nov 20 19:43:32 2014 +0100
Branches: input_method_editor
https://developer.blender.org/rB70dee80a8b74ce0a16f2d7d1bad30fa6a1f66fd9

Fix T42622, environment texture GLSL result different from rendering.

Also included mirror ball shader, which was missing.

===================================================================

M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/nodes/shader/nodes/node_shader_tex_environment.c

===================================================================

diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index a737741..7098f65 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -2390,10 +2390,27 @@ void node_tex_clouds(vec3 co, float size, out vec4 color, out float fac)
 	fac = 1.0;
 }
 
-void node_tex_environment(vec3 co, sampler2D ima, out vec4 color)
+void node_tex_environment_equirectangular(vec3 co, sampler2D ima, out vec4 color)
 {
-	float u = (atan(co.y, co.x) + M_PI)/(2.0*M_PI);
-	float v = atan(co.z, hypot(co.x, co.y))/M_PI + 0.5;
+	vec3 nco = normalize(co);
+	float u = -atan(nco.y, nco.x)/(2.0*M_PI) + 0.5;
+	float v = atan(nco.z, hypot(nco.x, nco.y))/M_PI + 0.5;
+
+	color = texture2D(ima, vec2(u, v));
+}
+
+void node_tex_environment_mirror_ball(vec3 co, sampler2D ima, out vec4 color)
+{
+	vec3 nco = normalize(co);
+
+	nco.y -= 1.0;
+
+	float div = 2.0*sqrt(max(-0.5*nco.y, 0.0f));
+	if(div > 0.0f)
+		nco /= div;
+
+	float u = 0.5*(nco.x + 1.0);
+	float v = 0.5*(nco.z + 1.0);
 
 	color = texture2D(ima, vec2(u, v));
 }
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_environment.c b/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
index dcb3ef3..56db9dd 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
@@ -72,8 +72,11 @@ static int node_shader_gpu_tex_environment(GPUMaterial *mat, bNode *node, bNodeE
 
 	node_shader_gpu_tex_mapping(mat, node, in, out);
 
-	ret = GPU_stack_link(mat, "node_tex_environment", in, out, GPU_image(ima, iuser, isdata));
-
+	if (tex->projection == SHD_PROJ_EQUIRECTANGULAR)
+		ret = GPU_stack_link(mat, "node_tex_environment_equirectangular", in, out, GPU_image(ima, iuser, isdata));
+	else
+		ret = GPU_stack_link(mat, "node_tex_environment_mirror_ball", in, out, GPU_image(ima, iuser, isdata));
+		
 	if (ret) {
 		ImBuf *ibuf = BKE_image_acquire_ibuf(ima, iuser, NULL);
 		if (ibuf && (ibuf->colormanage_flag & IMB_COLORMANAGE_IS_DATA) == 0 &&




More information about the Bf-blender-cvs mailing list