[Bf-blender-cvs] [29f3e13] cycles-ptex-49: Add support for GPU drawing of Ptex textures to image node

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


Commit: 29f3e1374b3bf531d15df67cdc5a83f262fedfe9
Author: Nicholas Bishop
Date:   Tue Jan 20 12:55:15 2015 +0100
Branches: cycles-ptex-49
https://developer.blender.org/rB29f3e1374b3bf531d15df67cdc5a83f262fedfe9

Add support for GPU drawing of Ptex textures to image node

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

M	source/blender/nodes/shader/nodes/node_shader_tex_image.c

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

diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_image.c b/source/blender/nodes/shader/nodes/node_shader_tex_image.c
index 62db5b7..520866d 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tex_image.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_image.c
@@ -54,6 +54,18 @@ static void node_shader_init_tex_image(bNodeTree *UNUSED(ntree), bNode *node)
 	node->storage = tex;
 }
 
+/* TODO(nicholasbishop) */
+static bool image_node_needs_ptex(Image *ima, ImageUser *iuser)
+{
+	ImBuf *ibuf = BKE_image_acquire_ibuf(ima, iuser, NULL);
+	bool ret;
+
+	ret = (ibuf && ibuf->num_ptex_regions);
+	BKE_image_release_ibuf(ima, ibuf, NULL);
+
+	return ret;
+}
+
 static int node_shader_gpu_tex_image(GPUMaterial *mat, bNode *node, bNodeExecData *UNUSED(execdata), GPUNodeStack *in, GPUNodeStack *out)
 {
 	Image *ima = (Image *)node->id;
@@ -64,13 +76,26 @@ static int node_shader_gpu_tex_image(GPUMaterial *mat, bNode *node, bNodeExecDat
 
 	if (!ima)
 		return GPU_stack_link(mat, "node_tex_image_empty", in, out);
-	
-	if (!in[0].link)
-		in[0].link = GPU_attribute(CD_MTFACE, "");
 
-	node_shader_gpu_tex_mapping(mat, node, in, out);
+	/* TODO(nicholasbishop) */
+	if (image_node_needs_ptex(ima, iuser)) {
+		in[0].link = GPU_attribute(CD_TESSFACE_PTEX, "");
+
+		ret = GPU_stack_link(mat, "node_tex_ptex", in, out,
+							 GPU_image(ima, iuser, isdata),
+							 GPU_node_link_ptex(GPU_PTEX_INPUT_MAP,
+												NULL, ima));
+		return ret;
+	}
+	else {
+		if (!in[0].link)
+			in[0].link = GPU_attribute(CD_MTFACE, "");
 
-	ret = GPU_stack_link(mat, "node_tex_image", in, out, GPU_image(ima, iuser, isdata));
+		node_shader_gpu_tex_mapping(mat, node, in, out);
+
+		ret = GPU_stack_link(mat, "node_tex_image", in, out,
+							 GPU_image(ima, iuser, isdata));
+	}
 
 	if (ret) {
 		ImBuf *ibuf = BKE_image_acquire_ibuf(ima, iuser, NULL);




More information about the Bf-blender-cvs mailing list