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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to