[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41712] branches/bmesh/blender: svn merge -r41650:41655 ^/trunk/blender --- cycles merge, this wont copile, still need to manually update some funcs

Campbell Barton ideasman42 at gmail.com
Thu Nov 10 04:05:14 CET 2011


Revision: 41712
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41712
Author:   campbellbarton
Date:     2011-11-10 03:05:11 +0000 (Thu, 10 Nov 2011)
Log Message:
-----------
svn merge -r41650:41655 ^/trunk/blender  --- cycles merge, this wont copile, still need to manually update some funcs

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41650

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    branches/bmesh/blender/source/blender/blenkernel/BKE_node.h
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/node.c
    branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    branches/bmesh/blender/source/blender/editors/include/ED_uvedit.h
    branches/bmesh/blender/source/blender/editors/include/UI_interface.h
    branches/bmesh/blender/source/blender/editors/interface/interface_templates.c
    branches/bmesh/blender/source/blender/editors/mesh/mesh_data.c
    branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_image.c
    branches/bmesh/blender/source/blender/editors/space_buttons/CMakeLists.txt
    branches/bmesh/blender/source/blender/editors/space_buttons/buttons_context.c
    branches/bmesh/blender/source/blender/editors/space_buttons/buttons_intern.h
    branches/bmesh/blender/source/blender/editors/space_buttons/space_buttons.c
    branches/bmesh/blender/source/blender/editors/space_image/space_image.c
    branches/bmesh/blender/source/blender/editors/space_node/CMakeLists.txt
    branches/bmesh/blender/source/blender/editors/space_node/SConscript
    branches/bmesh/blender/source/blender/editors/space_node/node_edit.c
    branches/bmesh/blender/source/blender/editors/space_node/node_templates.c
    branches/bmesh/blender/source/blender/editors/space_view3d/drawmesh.c
    branches/bmesh/blender/source/blender/editors/space_view3d/drawobject.c
    branches/bmesh/blender/source/blender/editors/space_view3d/view3d_draw.c
    branches/bmesh/blender/source/blender/editors/uvedit/uvedit_ops.c
    branches/bmesh/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    branches/bmesh/blender/source/blender/gpu/intern/gpu_draw.c
    branches/bmesh/blender/source/blender/gpu/intern/gpu_material.c
    branches/bmesh/blender/source/blender/makesdna/DNA_space_types.h
    branches/bmesh/blender/source/blender/makesrna/intern/rna_scene.c
    branches/bmesh/blender/source/blender/makesrna/intern/rna_space.c
    branches/bmesh/blender/source/blender/makesrna/intern/rna_ui_api.c
    branches/bmesh/blender/source/blender/nodes/shader/node_shader_util.c
    branches/bmesh/blender/source/blenderplayer/bad_level_call_stubs/stubs.c

Added Paths:
-----------
    branches/bmesh/blender/source/blender/editors/space_buttons/buttons_texture.c

Property Changed:
----------------
    branches/bmesh/blender/
    branches/bmesh/blender/release/
    branches/bmesh/blender/source/blender/editors/space_outliner/
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_add_shader.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_attribute.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_background.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_anisotropic.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_diffuse.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_glass.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_glossy.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_translucent.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_transparent.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_velvet.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_emission.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_fresnel.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_geometry.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_holdout.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_layer_weight.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_light_path.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_mix_shader.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_output_lamp.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_output_material.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_output_world.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_coord.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_environment.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_gradient.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_image.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_magic.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_musgrave.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_noise.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_sky.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_voronoi.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_tex_wave.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_volume_isotropic.c
    branches/bmesh/blender/source/blender/nodes/shader/nodes/node_shader_volume_transparent.c


Property changes on: branches/bmesh/blender
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/blender:39992-41650
   + /trunk/blender:39992-41655


Property changes on: branches/bmesh/blender/release
___________________________________________________________________
Modified: svn:mergeinfo
   - /trunk/blender/release:31524-41650
   + /trunk/blender/release:31524-41655

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2011-11-10 02:09:58 UTC (rev 41711)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2011-11-10 03:05:11 UTC (rev 41712)
@@ -379,6 +379,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);

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_node.h	2011-11-10 02:09:58 UTC (rev 41711)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_node.h	2011-11-10 03:05:11 UTC (rev 41712)
@@ -351,6 +351,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			nodeUpdate(struct bNodeTree *ntree, struct bNode *node);
 int				nodeUpdateID(struct bNodeTree *ntree, struct ID *id);

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-11-10 02:09:58 UTC (rev 41711)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-11-10 03:05:11 UTC (rev 41712)
@@ -1388,6 +1388,85 @@
 	dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
 }
 
+static void cdDM_drawMappedFacesMat(DerivedMesh *dm,
+	void (*setMaterial)(void *userData, int, void *attribs),
+	int (*setFace)(void *userData, int index), void *userData)
+{
+	CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
+	GPUVertexAttribs gattribs;
+	DMVertexAttribs attribs;
+	MVert *mvert = cddm->mvert;
+	MFace *mf = cddm->mface;
+	float (*nors)[3] = dm->getFaceDataArray(dm, CD_NORMAL);
+	int a, matnr, new_matnr;
+	int orig, *index = dm->getFaceDataArray(dm, CD_ORIGINDEX);
+
+	cdDM_update_normals_from_pbvh(dm);
+
+	matnr = -1;
+
+	glShadeModel(GL_SMOOTH);
+
+	memset(&attribs, 0, sizeof(attribs));
+
+	glBegin(GL_QUADS);
+
+	for(a = 0; a < dm->numFaceData; a++, mf++) {
+		const int smoothnormal = (mf->flag & ME_SMOOTH);
+
+		/* material */
+		new_matnr = mf->mat_nr + 1;
+
+		if(new_matnr != matnr) {
+			glEnd();
+
+			setMaterial(userData, matnr = new_matnr, &gattribs);
+			DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
+
+			glBegin(GL_QUADS);
+		}
+
+		/* skipping faces */
+		if(setFace) {
+			orig = (index)? index[a]: a;
+
+			if(orig != ORIGINDEX_NONE && !setFace(userData, orig))
+				continue;
+		}
+
+		/* smooth normal */
+		if(!smoothnormal) {
+			if(nors) {
+				glNormal3fv(nors[a]);
+			}
+			else {
+				/* TODO ideally a normal layer should always be available */
+				float nor[3];
+
+				if(mf->v4)
+					normal_quad_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co, mvert[mf->v4].co);
+				else
+					normal_tri_v3( nor,mvert[mf->v1].co, mvert[mf->v2].co, mvert[mf->v3].co);
+
+				glNormal3fv(nor);
+			}
+		}
+
+		/* vertices */
+		cddm_draw_attrib_vertex(&attribs, mvert, a, mf->v1, 0, smoothnormal);
+		cddm_draw_attrib_vertex(&attribs, mvert, a, mf->v2, 1, smoothnormal);
+		cddm_draw_attrib_vertex(&attribs, mvert, a, mf->v3, 2, smoothnormal);
+
+		if(mf->v4)
+			cddm_draw_attrib_vertex(&attribs, mvert, a, mf->v4, 3, smoothnormal);
+		else
+			cddm_draw_attrib_vertex(&attribs, mvert, a, mf->v3, 2, smoothnormal);
+	}
+	glEnd();
+
+	glShadeModel(GL_FLAT);
+}
+
 static void cdDM_drawMappedEdges(DerivedMesh *dm, int (*setDrawOptions)(void *userData, int index), void *userData)
 {
 	CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
@@ -1606,6 +1685,7 @@
 	dm->drawMappedFaces = cdDM_drawMappedFaces;
 	dm->drawMappedFacesTex = cdDM_drawMappedFacesTex;
 	dm->drawMappedFacesGLSL = cdDM_drawMappedFacesGLSL;
+	dm->drawMappedFacesMat = cdDM_drawMappedFacesMat;
 
 	dm->foreachMappedVert = cdDM_foreachMappedVert;
 	dm->foreachMappedEdge = cdDM_foreachMappedEdge;

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-11-10 02:09:58 UTC (rev 41711)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c	2011-11-10 03:05:11 UTC (rev 41712)
@@ -1120,6 +1120,141 @@
 	dm->drawMappedFacesGLSL(dm, setMaterial, NULL, NULL);
 }
 
+
+static void bmDM_drawMappedFacesMat(DerivedMesh *dm,
+			   void (*setMaterial)(void *userData, int, void *attribs),
+			   int (*setFace)(void *userData, int index), void *userData)
+{
+	EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm;
+	EditMesh *em= bmdm->em;
+	float (*vertexCos)[3]= bmdm->vertexCos;
+	float (*vertexNos)[3]= bmdm->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(bmdm->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 {
+				glNormal3fv(efa->v3->no);
+				glVertex3fv(efa->v3->co);
+			}
+
+			if(efa->v4) {
+				PASSATTRIB(efa, efa->v4, 3);
+				if(vertexCos) {
+					glNormal3fv(vertexNos[(int) efa->v4->tmp.l]);
+					glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
+				}
+				else {
+					glNormal3fv(efa->v4->no);
+					glVertex3fv(efa->v4->co);
+				}
+			}
+		}
+		glEnd();
+	}
+#undef PASSATTRIB
+}
+
 static void bmDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
 {
 	EditDerivedBMesh *bmdm= (EditDerivedBMesh*) dm;
@@ -1561,6 +1696,7 @@
 	bmdm->dm.drawMappedFaces = bmDM_drawMappedFaces;
 	bmdm->dm.drawMappedFacesTex = bmDM_drawMappedFacesTex;
 	bmdm->dm.drawMappedFacesGLSL = bmDM_drawMappedFacesGLSL;
+	bmdm->dm.drawMappedFacesMat = bmDM_drawMappedFacesMat;
 	bmdm->dm.drawFacesTex = bmDM_drawFacesTex;
 	bmdm->dm.drawFacesGLSL = bmDM_drawFacesGLSL;
 	bmdm->dm.drawUVEdges = bmDM_drawUVEdges;

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/node.c	2011-11-10 02:09:58 UTC (rev 41711)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/node.c	2011-11-10 03:05:11 UTC (rev 41712)
@@ -1314,11 +1314,15 @@

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list