Commit: c50694060db83a1a77685dbe2cb01350a7bed98d
Author: Nicholas Bishop
Date:   Tue Jan 20 18:42:02 2015 +0100
Branches: cycles-ptex-49
https://developer.blender.org/rBc50694060db83a1a77685dbe2cb01350a7bed98d

Add Ptex shader node

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

M       release/scripts/startup/nodeitems_builtins.py
M       source/blender/blenkernel/BKE_node.h
M       source/blender/blenkernel/intern/node.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/editors/space_node/drawnode.c
M       source/blender/editors/space_view3d/view3d_draw.c
M       source/blender/makesdna/DNA_image_types.h
M       source/blender/makesdna/DNA_node_types.h
M       source/blender/makesrna/intern/rna_image.c
M       source/blender/makesrna/intern/rna_nodetree.c
M       source/blender/nodes/CMakeLists.txt
M       source/blender/nodes/NOD_shader.h
M       source/blender/nodes/NOD_static_types.h
A       source/blender/nodes/shader/nodes/node_shader_tex_ptex.c

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

diff --git a/release/scripts/startup/nodeitems_builtins.py 
b/release/scripts/startup/nodeitems_builtins.py
index 1590bd4..9ebfbd8 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -234,6 +234,7 @@ shader_node_categories = [
         NodeItem("ShaderNodeTexMagic"),
         NodeItem("ShaderNodeTexChecker"),
         NodeItem("ShaderNodeTexBrick"),
+        NodeItem("ShaderNodeTexPtex"),
         ]),
     ShaderNewNodeCategory("SH_NEW_OP_COLOR", "Color", items=[
         NodeItem("ShaderNodeMixRGB"),
diff --git a/source/blender/blenkernel/BKE_node.h 
b/source/blender/blenkernel/BKE_node.h
index 573fa60..42b1753 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -755,6 +755,7 @@ struct ShadeResult;
 #define SH_NODE_COMBXYZ                                        189
 #define SH_NODE_OUTPUT_LINESTYLE               190
 #define SH_NODE_UVALONGSTROKE                  191
+#define SH_NODE_TEX_PTEX                192
 
 /* custom defines options for Material node */
 #define SH_NODE_MAT_DIFF   1
diff --git a/source/blender/blenkernel/intern/node.c 
b/source/blender/blenkernel/intern/node.c
index f30e3b6..d8d13da 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -3568,6 +3568,7 @@ static void registerShaderNodes(void)
        register_node_type_sh_tex_magic();
        register_node_type_sh_tex_checker();
        register_node_type_sh_tex_brick();
+       register_node_type_sh_tex_ptex();
 }
 
 static void registerTextureNodes(void)
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index 7bfe6f0..b892d3d 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -1319,6 +1319,8 @@ void blo_make_image_pointer_map(FileData *fd, Main 
*oldmain)
                        oldnewmap_insert(fd->imamap, ima->cache, ima->cache, 0);
                if (ima->gputexture)
                        oldnewmap_insert(fd->imamap, ima->gputexture, 
ima->gputexture, 0);
+               if (ima->ptex_gputexture)
+                       oldnewmap_insert(fd->imamap, ima->ptex_gputexture, 
ima->ptex_gputexture, 0);
                if (ima->rr)
                        oldnewmap_insert(fd->imamap, ima->rr, ima->rr, 0);
                for (a=0; a < IMA_MAX_RENDER_SLOT; a++)
@@ -1357,12 +1359,14 @@ void blo_end_image_pointer_map(FileData *fd, Main 
*oldmain)
                        ima->bindcode = 0;
                        ima->tpageflag &= ~IMA_GLBIND_IS_DATA;
                        ima->gputexture = NULL;
+                       ima->ptex_gputexture = NULL;
                        ima->rr = NULL;
                }
                for (i = 0; i < IMA_MAX_RENDER_SLOT; i++)
                        ima->renders[i] = newimaadr(fd, ima->renders[i]);
                
                ima->gputexture = newimaadr(fd, ima->gputexture);
+               ima->ptex_gputexture = newimaadr(fd, ima->ptex_gputexture);
                ima->rr = newimaadr(fd, ima->rr);
        }
        for (; sce; sce = sce->id.next) {
@@ -3360,6 +3364,7 @@ static void direct_link_image(FileData *fd, Image *ima)
                ima->bindcode = 0;
                ima->tpageflag &= ~IMA_GLBIND_IS_DATA;
                ima->gputexture = NULL;
+               ima->ptex_gputexture = NULL;
                ima->rr = NULL;
        }
        
diff --git a/source/blender/editors/space_node/drawnode.c 
b/source/blender/editors/space_node/drawnode.c
index c986a24..d78d50c 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -923,6 +923,16 @@ static void node_shader_buts_uvalongstroke(uiLayout 
*layout, bContext *UNUSED(C)
        uiItemR(layout, ptr, "use_tips", 0, NULL, 0);
 }
 
+static void node_shader_buts_ptex(uiLayout *layout, bContext *C, PointerRNA 
*ptr)
+{
+       PointerRNA obptr = CTX_data_pointer_get(C, "active_object");
+
+       if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
+               PointerRNA dataptr = RNA_pointer_get(&obptr, "data");
+               uiItemPointerR(layout, ptr, "layer_name", &dataptr, 
"loop_ptex", "", ICON_NONE);
+       }
+}
+
 static void node_shader_buts_normal_map(uiLayout *layout, bContext *C, 
PointerRNA *ptr)
 {
        uiItemR(layout, ptr, "space", 0, "", 0);
@@ -1167,6 +1177,9 @@ static void node_shader_set_butfunc(bNodeType *ntype)
                case SH_NODE_OUTPUT_LINESTYLE:
                        ntype->draw_buttons = node_buts_output_linestyle;
                        break;
+               case SH_NODE_TEX_PTEX:
+                       ntype->draw_buttons = node_shader_buts_ptex;
+                       break;
        }
 }
 
diff --git a/source/blender/editors/space_view3d/view3d_draw.c 
b/source/blender/editors/space_view3d/view3d_draw.c
index 929929c..828e4b6 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -2864,7 +2864,7 @@ static void view3d_main_area_clear(Scene *scene, View3D 
*v3d, ARegion *ar, bool
                        GPUMaterial *gpumat = GPU_material_world(scene, 
scene->world);
 
                        /* calculate full shader for background */
-                       GPU_material_bind(gpumat, 1, 1, 1.0, false, 
rv3d->viewmat, rv3d->viewinv, rv3d->viewcamtexcofac, (v3d->scenelock != 0));
+                       GPU_material_bind(gpumat, 1, 1, 1.0, false, 
rv3d->viewmat, rv3d->viewinv, rv3d->viewcamtexcofac, (v3d->scenelock != 0), 
NULL);
                        
                        glEnable(GL_DEPTH_TEST);
                        glDepthFunc(GL_ALWAYS);
diff --git a/source/blender/makesdna/DNA_image_types.h 
b/source/blender/makesdna/DNA_image_types.h
index dca1c83..0843e31 100644
--- a/source/blender/makesdna/DNA_image_types.h
+++ b/source/blender/makesdna/DNA_image_types.h
@@ -81,6 +81,7 @@ typedef struct Image {
        
        struct MovieCache *cache;       /* not written in file */
        struct GPUTexture *gputexture;  /* not written in file */
+       struct GPUTexture *ptex_gputexture;     /* not written in file */
        
        /* sources from: */
        struct anim *anim;
diff --git a/source/blender/makesdna/DNA_node_types.h 
b/source/blender/makesdna/DNA_node_types.h
index f08b3ea..7def2fe 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -779,6 +779,11 @@ typedef struct NodeTexMagic {
        int pad;
 } NodeTexMagic;
 
+typedef struct NodeTexPtex {
+       NodeTexBase base;
+       char layer_name[64];
+} NodeTexPtex;
+
 typedef struct NodeShaderAttribute {
        char name[64];
 } NodeShaderAttribute;
diff --git a/source/blender/makesrna/intern/rna_image.c 
b/source/blender/makesrna/intern/rna_image.c
index 5ab6d1a..4882e9d 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -377,6 +377,49 @@ static void rna_Image_pixels_set(PointerRNA *ptr, const 
float *values)
        BKE_image_release_ibuf(ima, ibuf, lock);
 }
 
+// TODO
+static int rna_Image_ptex_regions_get_length(PointerRNA *ptr,
+                                                                               
         int length[RNA_MAX_ARRAY_DIMENSION])
+{
+       Image *ima = ptr->id.data;
+       ImBuf *ibuf;
+       void *lock;
+
+       ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
+       if (ibuf && ibuf->ptex_regions)
+               length[0] = ibuf->num_ptex_regions * 4;
+       else
+               length[0] = 0;
+
+       BKE_image_release_ibuf(ima, ibuf, lock);
+
+       return length[0];
+}
+
+static void rna_Image_ptex_regions_get(PointerRNA *ptr, int *values)
+{
+       Image *ima = ptr->id.data;
+       ImBuf *ibuf;
+       void *lock;
+
+       ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
+
+       if (ibuf && ibuf->ptex_regions) {
+               memcpy(values, ibuf->ptex_regions,
+                          sizeof(*values) * ibuf->num_ptex_regions * 4);
+       }
+
+       BKE_image_release_ibuf(ima, ibuf, lock);
+}
+
+static void rna_Image_ptex_regions_set(PointerRNA *UNUSED(ptr),
+                                                                          
const int *UNUSED(values))
+{
+       BLI_assert(!"rna_Image_ptex_regions_set not implemented");
+}
+//
+
 static int rna_Image_channels_get(PointerRNA *ptr)
 {
        Image *im = (Image *)ptr->data;
@@ -805,6 +848,32 @@ static void rna_def_image(BlenderRNA *brna)
        RNA_def_property_dynamic_array_funcs(prop, 
"rna_Image_pixels_get_length");
        RNA_def_property_float_funcs(prop, "rna_Image_pixels_get", 
"rna_Image_pixels_set", NULL);
 
+       // TODO
+#if 0
+       {
+               StructRNA *srna2 = RNA_def_struct(brna, "ImagePtexRegion", 
NULL);
+               
+               prop = RNA_def_property(srna, "x", PROP_INT, PROP_NONE);
+               RNA_def_property_int_funcs(prop, "rna_ImagePtexRegion_x_get", 
"rna_ImagePtexRegion_x_set", NULL);
+       }
+       prop = RNA_def_property(srna, "ptex_table", PROP_COLLECTION, PROP_NONE);
+       RNA_def_property_struct_type(prop, "ImagePtexRegion");
+       RNA_def_property_collection_funcs(prop, "rna_Image_ptex_regions_begin",
+                                                                         
"rna_iterator_array_next",
+                                         "rna_Image_ptex_regions_end",
+                                                                         
"rna_iterator_array_get",
+                                                                         NULL, 
NULL, NULL, NULL);
+#else
+       prop = RNA_def_property(srna, "ptex_regions", PROP_INT, PROP_NONE);
+       RNA_def_property_flag(prop, PROP_DYNAMIC);
+       RNA_def_property_multi_array(prop, 1, NULL);
+       RNA_def_property_ui_text(prop, "Ptex Regions", "");
+       RNA_def_property_dynamic_array_funcs(prop,
+                                                                               
 "rna_Image_ptex_regions_get_length");
+       RNA_def_property_int_funcs(prop, "rna_Image_ptex_regions_get",
+                                                          
"rna_Image_ptex_regions_set", NULL);
+#endif
+
        prop = RNA_def_property(srna, "channels", PROP_INT, PROP_UNSIGNED);
        RNA_def_property_int_funcs(prop, "rna_Image_channels_get", NULL, NULL);
        RNA_def_property_ui_text(prop, "Channels", "Number of channels in 
pixels buffer");
diff --git a/source/blender/makesrna/intern/rna_nodetree.c 
b/source/blender/makesrna/intern/rna_nodetree.c
index 8d2a441..09bb678 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -3651,6 +3651,18 @@ static void def_sh_tex_wave(StructRNA *srna)
        RNA_def_property_update(prop, 0, "rna_Node_update");
 }
 
+static void def_sh_tex_ptex(StructRNA *srna)
+{
+       PropertyRNA *prop;
+
+       RNA_def_struct_sdna_from(srna, "NodeTexPtex", "storage");
+       def_sh_tex(srna);
+
+       prop = RNA_def_property(srna, "layer_name", PROP_STRING, PROP_NONE);
+       RNA_def_property_ui_text(prop, "Layer Name", "Name of Ptex layer");
+       RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
+}
+
 static void def_sh_tex_coord(StructRNA *srna)
 {
        PropertyRNA *prop;
diff --git a/source/blender/nodes/CMakeLists.txt 
b/source/blender/nodes/CMakeLists.txt
index 9eb6c16..529583f 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -199,6 +199,7 @@ set(SRC
        shader/nodes/node_shader_tex_magic.c
        shader/nodes/node_shader_tex_musgrave.c
        shader/nodes/node_shader_tex_noise.c
+       shader/nodes/node_shader_tex_ptex.c
        shader/nodes/node_shader_tex_sky.c
        shader/nodes/node_shader_tex_voronoi.c
        shader/nodes/node_shader_tex_wave.c
diff --git a/source/blender/nodes/NOD_shader.h b/source/blender/no

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to