[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