Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-01-21 20:44:30 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-01-21 22:41:42 +0300
commit12ccac657f173ca74716e67cc80830c1142f8b22 (patch)
tree7d77307c14c4e8d7e28a9ec5727332ebb764a4e1 /intern/cycles/kernel/svm
parentcd723967970e3330d5461eaf8a062d6321de5d4f (diff)
Cycles: Support sphere mapping for the image texture
Diffstat (limited to 'intern/cycles/kernel/svm')
-rw-r--r--intern/cycles/kernel/svm/svm_image.h5
-rw-r--r--intern/cycles/kernel/svm/svm_types.h6
2 files changed, 10 insertions, 1 deletions
diff --git a/intern/cycles/kernel/svm/svm_image.h b/intern/cycles/kernel/svm/svm_image.h
index 9948a192117..44d15e185cb 100644
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@ -363,6 +363,10 @@ ccl_device void svm_node_tex_image(KernelGlobals *kg, ShaderData *sd, float *sta
float3 co = stack_load_float3(stack, co_offset);
uint use_alpha = stack_valid(alpha_offset);
+ if(node.w == NODE_IMAGE_PROJ_SPHERE) {
+ co = (co - make_float3(0.5f, 0.5f, 0.5f)) * 2.0f;
+ map_to_sphere(&co.x, &co.y, co.x, co.y, co.z);
+ }
float4 f = svm_image_texture(kg, id, co.x, co.y, srgb, use_alpha);
if(stack_valid(out_offset))
@@ -463,7 +467,6 @@ ccl_device void svm_node_tex_image_box(KernelGlobals *kg, ShaderData *sd, float
stack_store_float(stack, alpha_offset, f.w);
}
-
ccl_device void svm_node_tex_environment(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node)
{
uint id = node.y;
diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h
index b1439aa1616..d5c3cebe1af 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -334,6 +334,12 @@ typedef enum NodeNormalMapSpace {
NODE_NORMAL_MAP_BLENDER_WORLD,
} NodeNormalMapSpace;
+typedef enum NodeImageProjection {
+ NODE_IMAGE_PROJ_FLAT = 0,
+ NODE_IMAGE_PROJ_BOX = 1,
+ NODE_IMAGE_PROJ_SPHERE = 2,
+} NodeImageProjection;
+
typedef enum ShaderType {
SHADER_TYPE_SURFACE,
SHADER_TYPE_VOLUME,