[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