Commit: d8d016018dff8ce9590e02db72075058507660d5
Author: Nicholas Bishop
Date:   Fri Jan 16 11:59:53 2015 +0100
Branches: cycles-ptex-06
https://developer.blender.org/rBd8d016018dff8ce9590e02db72075058507660d5

Add flag to distinguish ptex files in texture node

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

M       intern/cycles/kernel/svm/svm_image.h
M       intern/cycles/render/nodes.cpp

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

diff --git a/intern/cycles/kernel/svm/svm_image.h 
b/intern/cycles/kernel/svm/svm_image.h
index b4c624a..4c1f89c 100644
--- a/intern/cycles/kernel/svm/svm_image.h
+++ b/intern/cycles/kernel/svm/svm_image.h
@@ -395,34 +395,41 @@ 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);
 
-       assert(co.x >= 0 && co.x <= 1);
-       assert(co.y >= 0 && co.y <= 1);
-
-       // TODO: test hacks for Ptex
-       uint face_id = (uint)(co[2] + 0.5f);
-       uint offset = kernel_tex_fetch(__ptex_table, id);
-       float2 tex_size =
-               make_float2((float)kernel_tex_fetch(__ptex_table, offset + 0),
-                                       (float)kernel_tex_fetch(__ptex_table, 
offset + 1));
-       offset += 2;
-       offset += 4 * face_id;
-
-       float2 ptex_origin =
-               make_float2((float)kernel_tex_fetch(__ptex_table, offset + 0),
-                                       (float)kernel_tex_fetch(__ptex_table, 
offset + 1));
-       float2 ptex_res =
-               make_float2((float)kernel_tex_fetch(__ptex_table, offset + 2),
-                                       (float)kernel_tex_fetch(__ptex_table, 
offset + 3));
-
-       float2 ptex_uv = ptex_origin + make_float2(co.x, 1 - co.y) * ptex_res;
-       ptex_uv /= tex_size;
-
-       float4 f = svm_image_texture(kg, id, ptex_uv.x, ptex_uv.y, srgb,
-                                                                use_alpha);
-       /* f.x = face_id / 20.0f; */
-       /* f.y = 0; */
-       /* f.z = 0;  */
-       //float4 f = svm_image_texture(kg, id, co.x, co.y, srgb, use_alpha);
+       float4 f;
+
+       if (srgb & 2) {
+               assert(co.x >= 0 && co.x <= 1);
+               assert(co.y >= 0 && co.y <= 1);
+
+               // TODO: test hacks for Ptex
+               uint face_id = (uint)(co[2] + 0.5f);
+               uint offset = kernel_tex_fetch(__ptex_table, id);
+               float2 tex_size =
+                       make_float2((float)kernel_tex_fetch(__ptex_table, 
offset + 0),
+                                               
(float)kernel_tex_fetch(__ptex_table, offset + 1));
+               offset += 2;
+               offset += 4 * face_id;
+
+               float2 ptex_origin =
+                       make_float2((float)kernel_tex_fetch(__ptex_table, 
offset + 0),
+                                               
(float)kernel_tex_fetch(__ptex_table, offset + 1));
+               float2 ptex_res =
+                       make_float2((float)kernel_tex_fetch(__ptex_table, 
offset + 2),
+                                               
(float)kernel_tex_fetch(__ptex_table, offset + 3));
+
+               float2 ptex_uv = ptex_origin + make_float2(co.x, 1 - co.y) * 
ptex_res;
+               ptex_uv /= tex_size;
+
+               f = svm_image_texture(kg, id, ptex_uv.x, ptex_uv.y, srgb,
+                                                                        
use_alpha);
+               
+               /* f.x = face_id / 20.0f; */
+               /* f.y = 0; */
+               /* f.z = 0;  */
+       }
+       else {
+               f = svm_image_texture(kg, id, co.x, co.y, srgb, use_alpha);
+       }
 
        if(stack_valid(out_offset))
                stack_store_float3(stack, out_offset, make_float3(f.x, f.y, 
f.z));
diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp
index 7c3e4b2..853122d 100644
--- a/intern/cycles/render/nodes.cpp
+++ b/intern/cycles/render/nodes.cpp
@@ -258,6 +258,11 @@ void ImageTextureNode::compile(SVMCompiler& compiler)
                compiler.stack_assign(vector_in);
 
                int srgb = (is_linear || color_space != "Color")? 0: 1;
+               // TODO(nicholasbishop): clean this up of course
+               int flags = srgb;
+               if (string_endswith(filename, ".ptx")) {
+                       flags |= 2;
+               }
                int vector_offset = vector_in->stack_offset;
 
                if(!tex_mapping.skip()) {
@@ -272,7 +277,7 @@ void ImageTextureNode::compile(SVMCompiler& compiler)
                                        vector_offset,
                                        color_out->stack_offset,
                                        alpha_out->stack_offset,
-                                       srgb));
+                                       flags));
                }
                else {
                        compiler.add_node(NODE_TEX_IMAGE_BOX,
@@ -281,7 +286,7 @@ void ImageTextureNode::compile(SVMCompiler& compiler)
                                        vector_offset,
                                        color_out->stack_offset,
                                        alpha_out->stack_offset,
-                                       srgb),
+                                       flags & 1),
                                __float_as_int(projection_blend));
                }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to