[Bf-blender-cvs] [150a3cd] compositor-2016: Support Cycles magic texture in GLSL viewport

Sergey Sharybin noreply at git.blender.org
Wed Jun 8 21:48:27 CEST 2016


Commit: 150a3cd7f807b7c3a68fe47457a25fef2cc2fdee
Author: Sergey Sharybin
Date:   Fri May 20 16:58:40 2016 +0200
Branches: compositor-2016
https://developer.blender.org/rB150a3cd7f807b7c3a68fe47457a25fef2cc2fdee

Support Cycles magic texture in GLSL viewport

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

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

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

diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index faeb9bb..67137c6 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -2750,10 +2750,65 @@ void node_tex_image_empty(vec3 co, out vec4 color, out float alpha)
 	alpha = 0.0;
 }
 
-void node_tex_magic(vec3 p, float scale, float distortion, out vec4 color, out float fac)
+void node_tex_magic(vec3 co, float scale, float distortion, float depth, out vec4 color, out float fac)
 {
-	color = vec4(1.0);
-	fac = 1.0;
+	vec3 p = co * scale;
+	float x = sin((p.x + p.y + p.z)*5.0);
+	float y = cos((-p.x + p.y - p.z)*5.0);
+	float z = -cos((-p.x - p.y + p.z)*5.0);
+
+	if(depth > 0) {
+		x *= distortion;
+		y *= distortion;
+		z *= distortion;
+		y = -cos(x-y+z);
+		y *= distortion;
+		if(depth > 1) {
+			x = cos(x-y-z);
+			x *= distortion;
+			if(depth > 2) {
+				z = sin(-x-y-z);
+				z *= distortion;
+				if(depth > 3) {
+					x = -cos(-x+y-z);
+					x *= distortion;
+					if(depth > 4) {
+						y = -sin(-x+y+z);
+						y *= distortion;
+						if(depth > 5) {
+							y = -cos(-x+y+z);
+							y *= distortion;
+							if(depth > 6) {
+								x = cos(x+y+z);
+								x *= distortion;
+								if(depth > 7) {
+									z = sin(x+y-z);
+									z *= distortion;
+									if(depth > 8) {
+										x = -cos(-x-y+z);
+										x *= distortion;
+										if(depth > 9) {
+											y = -sin(x-y+z);
+											y *= distortion;
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	if(distortion != 0.0) {
+		distortion *= 2.0;
+		x /= distortion;
+		y /= distortion;
+		z /= distortion;
+	}
+
+	color = vec4(0.5f - x, 0.5f - y, 0.5f - z, 1.0);
+	fac = (color.x + color.y + color.z) / 3.0;
 }
 
 void node_tex_musgrave(vec3 co, float scale, float detail, float dimension, float lacunarity, float offset, float gain, out vec4 color, out float fac)
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_magic.c b/source/blender/nodes/shader/nodes/node_shader_tex_magic.c
index 80904e3..8700d79 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_magic.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_magic.c
@@ -57,8 +57,10 @@ static int node_shader_gpu_tex_magic(GPUMaterial *mat, bNode *node, bNodeExecDat
 	NodeTexMagic *tex = (NodeTexMagic *)node->storage;
 	float depth = tex->depth;
 
-	if (!in[0].link)
+	if (!in[0].link) {
 		in[0].link = GPU_attribute(CD_ORCO, "");
+		GPU_link(mat, "generated_from_orco", in[0].link, &in[0].link);
+	}
 
 	node_shader_gpu_tex_mapping(mat, node, in, out);




More information about the Bf-blender-cvs mailing list