[Bf-blender-cvs] [f8ef1f0] object_nodes: Straightforward texture eval function in BKE for getting texture results with derivatives.

Lukas Tönne noreply at git.blender.org
Wed May 25 11:58:53 CEST 2016


Commit: f8ef1f0d091bc94b44391826d49b186f00dc8953
Author: Lukas Tönne
Date:   Wed May 25 10:35:37 2016 +0200
Branches: object_nodes
https://developer.blender.org/rBf8ef1f0d091bc94b44391826d49b186f00dc8953

Straightforward texture eval function in BKE for getting texture results with derivatives.

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

M	source/blender/blenkernel/BKE_texture.h
M	source/blender/blenkernel/intern/texture.c

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

diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index 6c1b87b..e4c9a6d 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -137,6 +137,11 @@ bool    BKE_texture_is_image_user(const struct Tex *tex);
 void BKE_texture_get_value(
         const struct Scene *scene, struct Tex *texture,
         float *tex_co, struct TexResult *texres, bool use_color_management);
+void BKE_texture_get_value_deriv(
+        const struct Scene *scene, struct Tex *texture,
+        const float *tex_co, const float *tex_dx, const float *tex_dy,
+        struct TexResult *texres, struct TexResult *texres_dx, struct TexResult *texres_dy,
+        bool use_color_management);
 
 void BKE_texture_invalidate(struct EvaluationContext *eval_ctx, struct Tex *tex);
 
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index ff2db97..8e24dd1 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -1684,6 +1684,43 @@ void BKE_texture_get_value(
 	}
 }
 
+void BKE_texture_get_value_deriv(
+        const Scene *scene, Tex *texture,
+        const float *tex_co, const float *tex_dx, const float *tex_dy,
+        TexResult *texres, TexResult *texres_dx, TexResult *texres_dy,
+        bool UNUSED(use_color_management))
+{
+	int result_type;
+
+	/* no node textures for now */
+	if (texture->use_nodes && texture->nodetree) {
+		struct BVMFunction *fn = BVM_gen_texture_function_llvm(texture->nodetree, true);
+		if (fn) {
+			struct BVMEvalContext *context = BVM_context_create();
+			
+			BVM_eval_texture_llvm(context, fn, 
+			                      texres, texres_dx, texres_dy,
+			                      tex_co, tex_dx, tex_dy,
+			                      0, 0, scene->r.cfra, false);
+			result_type = TEX_INT | TEX_RGB | TEX_NOR;
+			
+			BVM_context_free(context);
+			BVM_function_llvm_release(fn);
+		}
+	}
+
+	/* if the texture gave an RGB value, we assume it didn't give a valid
+	 * intensity, since this is in the context of modifiers don't use perceptual color conversion.
+	 * if the texture didn't give an RGB value, copy the intensity across
+	 */
+	if (result_type & TEX_RGB) {
+		texres->tin = (1.0f / 3.0f) * (texres->tr + texres->tg + texres->tb);
+	}
+	else {
+		copy_v3_fl(&texres->tr, texres->tin);
+	}
+}
+
 /* -------------------- */
 /* Depsgraph evaluation */




More information about the Bf-blender-cvs mailing list