[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37871] branches/cycles: Cycles: working towards texture workflow design

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Jun 27 19:10:50 CEST 2011


Revision: 37871
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37871
Author:   blendix
Date:     2011-06-27 17:10:50 +0000 (Mon, 27 Jun 2011)
Log Message:
-----------
Cycles: working towards texture workflow design
http://wiki.blender.org/index.php/Dev:2.5/Source/Render/TextureWorkflow

* Added "active texture node" in shading node trees.
* Texture draw mode draw active texture node now, and new Material draw
  mode shows GLSL material.
* GLSL materials now match solid draw mode lighting better.
* Texture properties can now texture nodes from material/world/lamp.

Modified Paths:
--------------
    branches/cycles/intern/cycles/blender/addon/ui.py
    branches/cycles/release/scripts/startup/bl_ui/space_view3d.py
    branches/cycles/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/cycles/source/blender/blenkernel/BKE_node.h
    branches/cycles/source/blender/blenkernel/BKE_scene.h
    branches/cycles/source/blender/blenkernel/intern/DerivedMesh.c
    branches/cycles/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/cycles/source/blender/blenkernel/intern/material.c
    branches/cycles/source/blender/blenkernel/intern/node.c
    branches/cycles/source/blender/blenkernel/intern/scene.c
    branches/cycles/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/cycles/source/blender/blenloader/intern/readfile.c
    branches/cycles/source/blender/editors/include/ED_node.h
    branches/cycles/source/blender/editors/include/UI_interface.h
    branches/cycles/source/blender/editors/interface/interface_node.c
    branches/cycles/source/blender/editors/interface/interface_templates.c
    branches/cycles/source/blender/editors/interface/interface_widgets.c
    branches/cycles/source/blender/editors/space_buttons/buttons_context.c
    branches/cycles/source/blender/editors/space_buttons/buttons_intern.h
    branches/cycles/source/blender/editors/space_buttons/buttons_texture.c
    branches/cycles/source/blender/editors/space_node/CMakeLists.txt
    branches/cycles/source/blender/editors/space_node/SConscript
    branches/cycles/source/blender/editors/space_node/node_edit.c
    branches/cycles/source/blender/editors/space_node/node_intern.h
    branches/cycles/source/blender/editors/space_node/node_select.c
    branches/cycles/source/blender/editors/space_view3d/drawmesh.c
    branches/cycles/source/blender/editors/space_view3d/drawobject.c
    branches/cycles/source/blender/editors/space_view3d/view3d_draw.c
    branches/cycles/source/blender/gpu/GPU_extensions.h
    branches/cycles/source/blender/gpu/GPU_material.h
    branches/cycles/source/blender/gpu/intern/gpu_draw.c
    branches/cycles/source/blender/gpu/intern/gpu_material.c
    branches/cycles/source/blender/gpu/intern/gpu_shader_material.glsl
    branches/cycles/source/blender/gpu/intern/gpu_shader_material.glsl.c
    branches/cycles/source/blender/makesdna/DNA_node_types.h
    branches/cycles/source/blender/makesdna/DNA_object_types.h
    branches/cycles/source/blender/makesdna/DNA_view3d_types.h
    branches/cycles/source/blender/makesrna/intern/rna_nodetree.c
    branches/cycles/source/blender/makesrna/intern/rna_space.c
    branches/cycles/source/blender/makesrna/intern/rna_ui_api.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_blend.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_clouds.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_distnoise.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_environment.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_image.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_magic.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_marble.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_musgrave.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_noise.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_sky.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_stucci.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_voronoi.c
    branches/cycles/source/blender/nodes/intern/SHD_nodes/SHD_tex_wood.c
    branches/cycles/source/blender/nodes/intern/SHD_util.h
    branches/cycles/source/gameengine/Ketsji/BL_BlenderShader.cpp
    branches/cycles/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

Modified: branches/cycles/intern/cycles/blender/addon/ui.py
===================================================================
--- branches/cycles/intern/cycles/blender/addon/ui.py	2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/intern/cycles/blender/addon/ui.py	2011-06-27 17:10:50 UTC (rev 37871)
@@ -233,7 +233,7 @@
 		layout.label(text="No output node.")
 	else:
 		input = find_node_input(node, input_name)
-		layout.template_node_view(id, ntree, node, input);
+		layout.template_node_view(ntree, node, input);
 
 class CyclesLamp_PT_lamp(CyclesButtonsPanel, bpy.types.Panel):
 	bl_label = "Surface"
@@ -354,31 +354,34 @@
 		pin_id = space.pin_id
 		use_pin_id = space.use_pin_id;
 		user = context.texture_user
+		node = context.texture_node
 
 		if not use_pin_id or not isinstance(pin_id, bpy.types.Texture):
 			pin_id = None
 
 		if not pin_id:
 			layout.template_texture_user()
+
+		if user:
 			layout.separator()
 
-		split = layout.split(percentage=0.65)
-		col = split.column()
+			split = layout.split(percentage=0.65)
+			col = split.column()
 
-		if pin_id:
-			col.template_ID(space, "pin_id")
-		elif user:
-			col.template_ID(user, "texture", new="texture.new")
-		
-		if tex:
-			row = split.row()
-			row.prop(tex, "use_nodes", icon="NODETREE", text="")
-			row.label()
+			if pin_id:
+				col.template_ID(space, "pin_id")
+			elif user:
+				col.template_ID(user, "texture", new="texture.new")
+			
+			if tex:
+				row = split.row()
+				row.prop(tex, "use_nodes", icon="NODETREE", text="")
+				row.label()
 
-			if not tex.use_nodes:
-				split = layout.split(percentage=0.2)
-				split.label(text="Type:")
-				split.prop(tex, "type", text="")
+				if not tex.use_nodes:
+					split = layout.split(percentage=0.2)
+					split.label(text="Type:")
+					split.prop(tex, "type", text="")
 
 class CyclesTexture_PT_nodes(CyclesButtonsPanel, bpy.types.Panel):
 	bl_label = "Nodes"
@@ -395,6 +398,22 @@
 		tex = context.texture
 		panel_node_draw(layout, tex, 'OUTPUT_TEXTURE', 'Color')
 
+class CyclesTexture_PT_node(CyclesButtonsPanel, bpy.types.Panel):
+	bl_label = "Node"
+	bl_context = "texture"
+
+	@classmethod
+	def poll(cls, context):
+		node = context.texture_node
+		return node and CyclesButtonsPanel.poll(context)
+
+	def draw(self, context):
+		layout = self.layout
+
+		node = context.texture_node
+		ntree = node.id_data
+		layout.template_node_view(ntree, node, None)
+
 class CyclesTexture_PT_mapping(CyclesButtonsPanel, bpy.types.Panel):
 	bl_label = "Mapping"
 	bl_context = "texture"
@@ -402,7 +421,8 @@
 	@classmethod
 	def poll(cls, context):
 		tex = context.texture
-		return (tex and tex.use_nodes) and CyclesButtonsPanel.poll(context)
+		node = context.texture_node
+		return (node or (tex and tex.use_nodes)) and CyclesButtonsPanel.poll(context)
 
 	def draw(self, context):
 		layout = self.layout
@@ -416,7 +436,8 @@
 	@classmethod
 	def poll(cls, context):
 		tex = context.texture
-		return (tex and tex.use_nodes) and CyclesButtonsPanel.poll(context)
+		node = context.texture_node
+		return (node or (tex and tex.use_nodes)) and CyclesButtonsPanel.poll(context)
 
 	def draw(self, context):
 		layout = self.layout

Modified: branches/cycles/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- branches/cycles/release/scripts/startup/bl_ui/space_view3d.py	2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/release/scripts/startup/bl_ui/space_view3d.py	2011-06-27 17:10:50 UTC (rev 37871)
@@ -2127,7 +2127,6 @@
         col = layout.column()
         col.label(text="Shading:")
         col.prop(gs, "material_mode", text="")
-        col.prop(view, "show_textured_solid")
 
         layout.separator()
 

Modified: branches/cycles/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/cycles/source/blender/blenkernel/BKE_DerivedMesh.h	2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/source/blender/blenkernel/BKE_DerivedMesh.h	2011-06-27 17:10:50 UTC (rev 37871)
@@ -325,6 +325,14 @@
 															   float t),
 								  void *userData);
 
+	/* Draw all faces with materials
+	 *  o setMaterial is called for every different material nr
+	 *  o setFace is called to verify if a face must be hidden
+	 */
+	void (*drawMappedFacesMat)(DerivedMesh *dm,
+		void (*setMaterial)(void *userData, int, void *attribs),
+		int (*setFace)(void *userData, int index), void *userData);
+
 	/* Release reference to the DerivedMesh. This function decides internally
 	 * if the DerivedMesh will be freed, or cached for later use. */
 	void (*release)(DerivedMesh *dm);
@@ -526,7 +534,7 @@
 typedef struct DMVertexAttribs {
 	struct {
 		struct MTFace *array;
-		int emOffset, glIndex;
+		int emOffset, glIndex, glTexco;
 	} tface[MAX_MTFACE];
 
 	struct {
@@ -541,7 +549,7 @@
 
 	struct {
 		float (*array)[3];
-		int emOffset, glIndex;
+		int emOffset, glIndex, glTexco;
 	} orco;
 
 	int tottface, totmcol, tottang, totorco;

Modified: branches/cycles/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/cycles/source/blender/blenkernel/BKE_node.h	2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/source/blender/blenkernel/BKE_node.h	2011-06-27 17:10:50 UTC (rev 37871)
@@ -201,6 +201,7 @@
 struct bNode	*nodeGetActiveID(struct bNodeTree *ntree, short idtype);
 int				nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id);
 void			nodeClearActiveID(struct bNodeTree *ntree, short idtype);
+struct bNode	*nodeGetActiveTexture(struct bNodeTree *ntree);
 
 void			NodeTagChanged(struct bNodeTree *ntree, struct bNode *node);
 int				NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id);

Modified: branches/cycles/source/blender/blenkernel/BKE_scene.h
===================================================================
--- branches/cycles/source/blender/blenkernel/BKE_scene.h	2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/source/blender/blenkernel/BKE_scene.h	2011-06-27 17:10:50 UTC (rev 37871)
@@ -102,6 +102,8 @@
 int get_render_shadow_samples(struct RenderData *r, int samples);
 float get_render_aosss_error(struct RenderData *r, float error);
 
+int scene_use_new_shading_system(struct Scene *scene);
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/cycles/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/cycles/source/blender/blenkernel/intern/DerivedMesh.c	2011-06-27 16:50:05 UTC (rev 37870)
+++ branches/cycles/source/blender/blenkernel/intern/DerivedMesh.c	2011-06-27 17:10:50 UTC (rev 37871)
@@ -1050,6 +1050,7 @@
 			glEnd();
 		}
 	}
+#undef PASSATTRIB
 }
 
 static void emDM_drawFacesGLSL(DerivedMesh *dm,
@@ -1058,6 +1059,140 @@
 	dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
 }
 
+static void emDM_drawMappedFacesMat(DerivedMesh *dm,
+			   void (*setMaterial)(void *userData, int, void *attribs),
+			   int (*setFace)(void *userData, int index), void *userData) 
+{
+	EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
+	EditMesh *em= emdm->em;
+	float (*vertexCos)[3]= emdm->vertexCos;
+	float (*vertexNos)[3]= emdm->vertexNos;
+	EditVert *eve;
+	EditFace *efa;
+	DMVertexAttribs attribs= {{{0}}};
+	GPUVertexAttribs gattribs;
+	int i, b, matnr, new_matnr;
+
+	matnr = -1;
+
+	/* always use smooth shading even for flat faces, else vertex colors wont interpolate */
+	glShadeModel(GL_SMOOTH);
+
+	for (i=0,eve=em->verts.first; eve; eve= eve->next)
+		eve->tmp.l = (intptr_t) i++;
+
+#define PASSATTRIB(efa, eve, vert) {											\
+	if(attribs.totorco) {														\
+		float *orco = attribs.orco.array[eve->tmp.l];							\
+		if(attribs.orco.glTexco)												\
+			glTexCoord3fv(orco);												\
+		else																	\
+			glVertexAttrib3fvARB(attribs.orco.glIndex, orco);					\
+	}																			\
+	for(b = 0; b < attribs.tottface; b++) {										\
+		MTFace *_tf = (MTFace*)((char*)efa->data + attribs.tface[b].emOffset);	\
+		if(attribs.tface[b].glTexco)											\
+			glTexCoord2fv(_tf->uv[vert]);										\
+		else																	\
+			glVertexAttrib2fvARB(attribs.tface[b].glIndex, _tf->uv[vert]);		\
+	}																			\
+	for(b = 0; b < attribs.totmcol; b++) {										\
+		MCol *cp = (MCol*)((char*)efa->data + attribs.mcol[b].emOffset);		\
+		GLubyte col[4];															\
+		col[0]= cp->b; col[1]= cp->g; col[2]= cp->r; col[3]= cp->a;				\
+		glVertexAttrib4ubvARB(attribs.mcol[b].glIndex, col);					\
+	}																			\
+	if(attribs.tottang) {														\
+		float *tang = attribs.tang.array[i*4 + vert];							\
+		glVertexAttrib4fvARB(attribs.tang.glIndex, tang);						\
+	}																			\
+}
+
+	for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
+		int drawSmooth= (efa->flag & ME_SMOOTH);
+
+		/* face hiding */
+		if(setFace && !setFace(userData, i))
+			continue;
+
+		/* material */
+		new_matnr = efa->mat_nr + 1;
+		if(new_matnr != matnr) {
+			setMaterial(userData, matnr = new_matnr, &gattribs);
+			DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
+		}
+
+		/* face */
+		glBegin(efa->v4?GL_QUADS:GL_TRIANGLES);
+		if (!drawSmooth) {
+			if(vertexCos) glNormal3fv(emdm->faceNos[i]);
+			else glNormal3fv(efa->n);
+
+			PASSATTRIB(efa, efa->v1, 0);
+			if(vertexCos) glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
+			else glVertex3fv(efa->v1->co);
+
+			PASSATTRIB(efa, efa->v2, 1);
+			if(vertexCos) glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
+			else glVertex3fv(efa->v2->co);
+
+			PASSATTRIB(efa, efa->v3, 2);
+			if(vertexCos) glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
+			else glVertex3fv(efa->v3->co);
+
+			if(efa->v4) {
+				PASSATTRIB(efa, efa->v4, 3);
+				if(vertexCos) glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
+				else glVertex3fv(efa->v4->co);
+			}
+		} else {
+			PASSATTRIB(efa, efa->v1, 0);
+			if(vertexCos) {
+				glNormal3fv(vertexNos[(int) efa->v1->tmp.l]);
+				glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
+			}
+			else {
+				glNormal3fv(efa->v1->no);
+				glVertex3fv(efa->v1->co);
+			}
+
+			PASSATTRIB(efa, efa->v2, 1);
+			if(vertexCos) {
+				glNormal3fv(vertexNos[(int) efa->v2->tmp.l]);
+				glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
+			}
+			else {
+				glNormal3fv(efa->v2->no);
+				glVertex3fv(efa->v2->co);
+			}
+
+			PASSATTRIB(efa, efa->v3, 2);
+			if(vertexCos) {
+				glNormal3fv(vertexNos[(int) efa->v3->tmp.l]);
+				glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
+			}
+			else {

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list