[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