[Bf-blender-cvs] [c506940] cycles-ptex-49: Add Ptex shader node

Nicholas Bishop noreply at git.blender.org
Fri Feb 6 17:35:08 CET 2015


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. @@




More information about the Bf-blender-cvs mailing list