Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-01-08 20:53:17 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-01-08 20:53:17 +0300
commit9ceed4043f2d50bf610e21e80f175b2c4a888faa (patch)
treef1c5e2643475b4015643be1ee4bc34f5b531b3bb /source/blender/editors/space_view3d/drawobject.c
parenteb2e64afa5b229f8290159ee8cc70a2996f5a3d0 (diff)
Fix #19659, #20387, #20489, part of #20565. VBO's in edit mode were not
working well, and no one seems to be fixing it, so I've just removed the code for this. It has to be replaced eventually for bmesh anyway.
Diffstat (limited to 'source/blender/editors/space_view3d/drawobject.c')
-rw-r--r--source/blender/editors/space_view3d/drawobject.c507
1 files changed, 13 insertions, 494 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 66790d9b7f0..77d8ed0f24d 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -103,7 +103,6 @@
#include "GPU_draw.h"
#include "GPU_material.h"
#include "GPU_extensions.h"
-#include "gpu_buffers.h"
#include "ED_mesh.h"
#include "ED_particle.h"
@@ -820,6 +819,8 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob)
circrad = 3.0f*lampsize;
drawcircball(GL_LINE_LOOP, vec, circrad, imat);
}
+ else
+ circrad = 0.0f;
setlinestyle(3);
@@ -1575,82 +1576,15 @@ static void draw_dm_verts__mapFunc(void *userData, int index, float *co, float *
}
}
-/* disabled because it crashes combined with e.g. subsurf modifier,
- * the derivedmesh can't be assumed to be an EditMeshDerivedMesh,
- * nor should this struct be copied around, it should be defined in
- * a single place only to avoid them getting out of sync */
-#if 0
-/* originally defined in DerivedMesh.c */
-typedef struct {
- DerivedMesh dm;
-
- EditMesh *em;
- float (*vertexCos)[3];
- float (*vertexNos)[3];
- float (*faceNos)[3];
-} EditMeshDerivedMesh;
-#endif
-
static void draw_dm_verts(DerivedMesh *dm, int sel, EditVert *eve_act)
{
struct { int sel; EditVert *eve_act; } data;
- //GPUBuffer *buffer;
- //float *varray;
data.sel = sel;
data.eve_act = eve_act;
-#if 0
- /* first come the unselected vertices, then the selected */
- buffer = GPU_buffer_legacy(dm)?0:GPU_buffer_alloc( sizeof(float)*3*dm->getNumVerts(dm)*2, 0 );
-
- if( (varray = GPU_buffer_lock_stream( buffer )) && bglPointHack() == 0 ) {
- EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
- EditVert *eve;
- int i;
- int numverts = 0, numselected = 0;
- int datatype[] = { GPU_BUFFER_INTER_V3F, GPU_BUFFER_INTER_END };
- GPU_buffer_unlock( buffer );
- GPU_interleaved_setup( buffer, datatype );
- varray = GPU_buffer_lock_stream( buffer );
-
- glBegin(GL_POINTS);
- for (i=0,eve= emdm->em->verts.first; eve; i++,eve=eve->next) {
- if (eve->h==0 && (eve->f&SELECT)==data.sel) {
- if (eve==data.eve_act) {
- if (emdm->vertexCos) {
- VECCOPY(&varray[3*(dm->getNumVerts(dm)+numselected)],emdm->vertexCos[i]);
- }
- else {
- VECCOPY(&varray[3*(dm->getNumVerts(dm)+numselected)],eve->co);
- }
- numselected++;
- } else {
- if (emdm->vertexCos) {
- VECCOPY(&varray[3*numverts],emdm->vertexCos[i]);
- } else {
- VECCOPY(&varray[3*numverts],eve->co);
- }
- numverts++;
- }
- }
- }
- glEnd();
- GPU_buffer_unlock( buffer );
- glDrawArrays(GL_POINTS,0,numverts);
- UI_ThemeColor4(TH_EDITMESH_ACTIVE);
- glDrawArrays(GL_POINTS,dm->getNumVerts(dm),numselected);
- UI_ThemeColor4(data.sel?TH_VERTEX_SELECT:TH_VERTEX);
- GPU_buffer_unbind();
- }
- {
-#endif
- bglBegin(GL_POINTS);
- dm->foreachMappedVert(dm, draw_dm_verts__mapFunc, &data);
- bglEnd();
-#if 0
- }
- GPU_buffer_free( buffer, 0 );
-#endif
+ bglBegin(GL_POINTS);
+ dm->foreachMappedVert(dm, draw_dm_verts__mapFunc, &data);
+ bglEnd();
}
/* Draw edges with color set based on selection */
@@ -1722,55 +1656,8 @@ static void draw_dm_edges_sel_interp__setDrawInterpOptions(void *userData, int i
static void draw_dm_edges_sel_interp(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol)
{
unsigned char *cols[2] = {baseCol, selCol};
-#if 0
- int elemsize = sizeof(float)*3+sizeof(unsigned char)*4;
- EditMeshDerivedMesh *emdm = (EditMeshDerivedMesh *)dm;
- EditMesh *em= emdm->em;
- unsigned char *varray;
- int i;
- GPUBuffer *buffer;
-
- buffer = GPU_buffer_legacy(dm)?0:GPU_buffer_alloc( elemsize*em->totedge*2, 0 );
- if( (varray = GPU_buffer_lock_stream( buffer )) ) {
- EditEdge *eed;
- int numedges = 0;
- int datatype[] = { GPU_BUFFER_INTER_V3F, GPU_BUFFER_INTER_C4UB, GPU_BUFFER_INTER_END };
- GPU_buffer_unlock( buffer );
- GPU_interleaved_setup( buffer, datatype );
- varray = GPU_buffer_lock_stream( buffer );
- for (i=0,eed= em->edges.first; eed; i++,eed= eed->next) {
- if(eed->h==0) {
- unsigned char *col0 = cols[(eed->v1->f&SELECT)?1:0];
- unsigned char *col1 = cols[(eed->v2->f&SELECT)?1:0];
-
- if( emdm->vertexCos ) {
- VECCOPY(((float *)&varray[elemsize*numedges*2]),emdm->vertexCos[(int) eed->v1->tmp.l]);
- }
- else {
- VECCOPY(((float *)&varray[elemsize*numedges*2]),eed->v1->co);
- }
- QUATCOPY(&varray[elemsize*numedges*2+sizeof(float)*3],col0);
- if( emdm->vertexCos ) {
- VECCOPY(((float *)&varray[elemsize*numedges*2+elemsize]),emdm->vertexCos[(int) eed->v2->tmp.l]);
- }
- else {
- VECCOPY(((float *)&varray[elemsize*numedges*2+elemsize]),eed->v2->co);
- }
- QUATCOPY(&varray[elemsize*numedges*2+elemsize+sizeof(float)*3],col1);
- numedges++;
- }
- }
- GPU_buffer_unlock( buffer );
- glDrawArrays(GL_LINES,0,numedges*2);
- GPU_buffer_unbind();
- }
- else {
-#endif
- dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols);
-#if 0
- }
- GPU_buffer_free( buffer, 0 );
-#endif
+
+ dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols);
}
/* Draw only seam edges */
@@ -1824,236 +1711,12 @@ static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *dra
static void draw_dm_faces_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol, unsigned char *actCol, EditFace *efa_act)
{
struct { unsigned char *cols[3]; EditFace *efa_act; } data;
- //EditMeshDerivedMesh *emdm = (EditMeshDerivedMesh *)dm;
- EditFace *efa;
- unsigned char *col;
- GPUBuffer *buffer;
- unsigned char *varray;
- unsigned char black[] = { 0, 0, 0, 0 };
- int i, draw=0;
- int elemsize = (sizeof(float)*6+sizeof(unsigned char)*4);
data.cols[0] = baseCol;
data.cols[1] = selCol;
data.cols[2] = actCol;
data.efa_act = efa_act;
-
- buffer = GPU_buffer_legacy(dm)?0:GPU_buffer_alloc( elemsize*dm->getNumFaces(dm)*3*2, 0 );
- if( dm->getVertCos == 0 && (varray = GPU_buffer_lock_stream( buffer )) ) {
- int prevdraw = 0;
- int numfaces = 0;
- int datatype[] = { GPU_BUFFER_INTER_V3F, GPU_BUFFER_INTER_N3F, GPU_BUFFER_INTER_C4UB, GPU_BUFFER_INTER_END };
- GPU_buffer_unlock( buffer );
- GPU_interleaved_setup( buffer, datatype );
- glShadeModel(GL_SMOOTH);
- varray = GPU_buffer_lock_stream( buffer );
- for (i=0,efa= efa_act; efa; i++,efa= efa->next) {
- int drawSmooth = (efa->flag & ME_SMOOTH);
- if (efa->h==0) {
- if (efa == data.efa_act) {
- draw = 2;
- } else {
- col = data.cols[(efa->f&SELECT)?1:0];
- if (col[3]==0) draw = 0;
- else draw = 1;
- }
- }
- else {
- draw = 0;
- }
- if( prevdraw != draw && prevdraw != 0 && numfaces > 0) {
- if( prevdraw==2 ) {
- glEnable(GL_POLYGON_STIPPLE);
- glPolygonStipple(stipple_quarttone);
- }
- GPU_buffer_unlock( buffer );
- glDrawArrays(GL_TRIANGLES,0,numfaces*3);
- if( prevdraw==2 ) {
- glDisable(GL_POLYGON_STIPPLE);
- }
- varray = GPU_buffer_lock_stream( buffer );
- numfaces = 0;
- }
-
- if( draw != 0 ) {
- if(!drawSmooth) {
- /*if (emdm->vertexCos) {
- VECCOPY((float *)&varray[elemsize*3*numfaces],emdm->vertexCos[(int) efa->v1->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+sizeof(float)*3],emdm->faceNos[i]);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize],emdm->vertexCos[(int) efa->v2->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize+sizeof(float)*3],emdm->faceNos[i]);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2],emdm->vertexCos[(int) efa->v3->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*3],emdm->faceNos[i]);
- }
- else {*/
- VECCOPY((float *)&varray[elemsize*3*numfaces],efa->v1->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+sizeof(float)*3],efa->n);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize],efa->v2->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize+sizeof(float)*3],efa->n);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2],efa->v3->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*3],efa->n);
- /*}*/
- if( draw == 2 ) {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],data.cols[2]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],data.cols[2]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],data.cols[2]);
- }
- else if( draw == 1 ) {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- }
- else {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],black);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],black);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],black);
- }
-
- numfaces++;
- if( efa->v4 ) {
- /*if (emdm->vertexCos) {
- VECCOPY((float *)&varray[elemsize*3*numfaces],emdm->vertexCos[(int) efa->v3->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+sizeof(float)*3],emdm->faceNos[i]);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize],emdm->vertexCos[(int) efa->v4->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize+sizeof(float)*3],emdm->faceNos[i]);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2],emdm->vertexCos[(int) efa->v1->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*3],emdm->faceNos[i]);
- }
- else {*/
- VECCOPY((float *)&varray[elemsize*3*numfaces],efa->v3->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+sizeof(float)*3],efa->n);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize],efa->v4->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize+sizeof(float)*3],efa->n);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2],efa->v1->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*3],efa->n);
- /*}*/
-
- if( draw == 2 ) {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],data.cols[2]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],data.cols[2]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],data.cols[2]);
- }
- else if( draw == 1 ) {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- }
- else {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],black);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],black);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],black);
- }
-
- numfaces++;
- }
- }
- else {
- /*if (emdm->vertexCos) {
- VECCOPY((float *)&varray[elemsize*3*numfaces],emdm->vertexCos[(int) efa->v1->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+sizeof(float)*3],emdm->vertexNos[(int) efa->v1->tmp.l]);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize],emdm->vertexCos[(int) efa->v2->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize+sizeof(float)*3],emdm->vertexNos[(int) efa->v2->tmp.l]);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2],emdm->vertexCos[(int) efa->v3->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*3],emdm->vertexNos[(int) efa->v3->tmp.l]);
- }
- else {*/
- VECCOPY((float *)&varray[elemsize*3*numfaces],efa->v1->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+sizeof(float)*3],efa->v1->no);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize],efa->v2->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize+sizeof(float)*3],efa->v2->no);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2],efa->v3->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*3],efa->v3->no);
- /*}*/
-
- if( draw == 2 ) {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],data.cols[2]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],data.cols[2]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],data.cols[2]);
- }
- else if( draw == 1 ) {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- }
- else {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],black);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],black);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],black);
- }
-
- numfaces++;
- if( efa->v4 ) {
- /*if (emdm->vertexCos) {
- VECCOPY((float *)&varray[elemsize*3*numfaces],emdm->vertexCos[(int) efa->v3->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+sizeof(float)*3],emdm->vertexNos[(int) efa->v1->tmp.l]);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize],emdm->vertexCos[(int) efa->v4->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize+sizeof(float)*3],emdm->vertexNos[(int) efa->v2->tmp.l]);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2],emdm->vertexCos[(int) efa->v1->tmp.l]);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*3],emdm->vertexNos[(int) efa->v3->tmp.l]);
- }
- else {*/
- VECCOPY((float *)&varray[elemsize*3*numfaces],efa->v3->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+sizeof(float)*3],efa->v3->no);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize],efa->v4->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize+sizeof(float)*3],efa->v4->no);
-
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2],efa->v1->co);
- VECCOPY((float *)&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*3],efa->v1->no);
- /*}*/
-
- if( draw == 2 ) {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],data.cols[2]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],data.cols[2]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],data.cols[2]);
- }
- else if( draw == 1 ) {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],data.cols[(efa->f&SELECT)?1:0]);
- }
- else {
- QUATCOPY(&varray[elemsize*3*numfaces+sizeof(float)*6],black);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize+sizeof(float)*6],black);
- QUATCOPY(&varray[elemsize*3*numfaces+elemsize*2+sizeof(float)*6],black);
- }
-
- numfaces++;
- }
- }
- }
- prevdraw = draw;
- }
- GPU_buffer_unlock( buffer );
- if( prevdraw != 0 && numfaces > 0) {
- if( prevdraw==2 ) {
- glEnable(GL_POLYGON_STIPPLE);
- glPolygonStipple(stipple_quarttone);
- }
- glDrawArrays(GL_TRIANGLES,0,numfaces*3);
- if( prevdraw==2 ) {
- glDisable(GL_POLYGON_STIPPLE);
- }
- }
- GPU_buffer_unbind();
- } else {
- dm->drawMappedFaces(dm, draw_dm_faces_sel__setDrawOptions, &data, 0);
- }
- GPU_buffer_free( buffer, 0 );
+ dm->drawMappedFaces(dm, draw_dm_faces_sel__setDrawOptions, &data, 0);
}
static int draw_dm_creases__setDrawOptions(void *userData, int index)
@@ -2467,114 +2130,12 @@ static void draw_em_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object
}
else {
/* 3 floats for position, 3 for normal and times two because the faces may actually be quads instead of triangles */
- GPUBuffer *buffer = GPU_buffer_legacy(em->derivedFinal)?0:GPU_buffer_alloc( sizeof(float)*6*em->totface*3*2, 0 );
- float *varray;
- EditFace *efa;
- int i, curmat = 0, draw = 0;
-
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, me->flag & ME_TWOSIDED);
glEnable(GL_LIGHTING);
glFrontFace((ob->transflag&OB_NEG_SCALE)?GL_CW:GL_CCW);
- if( finalDM->getVertCos == 0 && (varray = GPU_buffer_lock_stream( buffer )) ) {
- int prevdraw = 0, prevmat = 0;
- int numfaces = 0;
- int datatype[] = { GPU_BUFFER_INTER_V3F, GPU_BUFFER_INTER_N3F, GPU_BUFFER_INTER_END };
- GPU_buffer_unlock( buffer );
- GPU_interleaved_setup( buffer, datatype );
- glShadeModel(GL_SMOOTH);
- varray = GPU_buffer_lock_stream( buffer );
- for (i=0,efa= em->faces.first; efa; i++,efa= efa->next) {
- int drawSmooth = (efa->flag & ME_SMOOTH);
- if( efa->h == 0 ) {
- curmat = efa->mat_nr+1;
- draw = 1;
- }
- else {
- draw = 0;
- }
- if( ((prevdraw != draw) || (curmat != prevmat)) && prevdraw != 0 && numfaces > 0) {
- if( prevdraw==2 ) {
- glEnable(GL_POLYGON_STIPPLE);
- glPolygonStipple(stipple_quarttone);
- }
- GPU_buffer_unlock( buffer );
- GPU_enable_material(prevmat, NULL);
- glDrawArrays(GL_TRIANGLES,0,numfaces*3);
- if( prevdraw==2 ) {
- glDisable(GL_POLYGON_STIPPLE);
- }
- varray = GPU_buffer_lock_stream( buffer );
- numfaces = 0;
- }
- if( draw != 0 ) {
- if(!drawSmooth) {
- VECCOPY(&varray[numfaces*18],efa->v1->co);
- VECCOPY(&varray[numfaces*18+3],efa->n);
-
- VECCOPY(&varray[numfaces*18+6],efa->v2->co);
- VECCOPY(&varray[numfaces*18+9],efa->n);
-
- VECCOPY(&varray[numfaces*18+12],efa->v3->co);
- VECCOPY(&varray[numfaces*18+15],efa->n);
- numfaces++;
- if( efa->v4 ) {
- VECCOPY(&varray[numfaces*18],efa->v3->co);
- VECCOPY(&varray[numfaces*18+3],efa->n);
-
- VECCOPY(&varray[numfaces*18+6],efa->v4->co);
- VECCOPY(&varray[numfaces*18+9],efa->n);
-
- VECCOPY(&varray[numfaces*18+12],efa->v1->co);
- VECCOPY(&varray[numfaces*18+15],efa->n);
- numfaces++;
- }
- }
- else {
- VECCOPY(&varray[numfaces*18],efa->v1->co);
- VECCOPY(&varray[numfaces*18+3],efa->v1->no);
-
- VECCOPY(&varray[numfaces*18+6],efa->v2->co);
- VECCOPY(&varray[numfaces*18+9],efa->v2->no);
-
- VECCOPY(&varray[numfaces*18+12],efa->v3->co);
- VECCOPY(&varray[numfaces*18+15],efa->v3->no);
- numfaces++;
- if( efa->v4 ) {
- VECCOPY(&varray[numfaces*18],efa->v3->co);
- VECCOPY(&varray[numfaces*18+3],efa->v3->no);
-
- VECCOPY(&varray[numfaces*18+6],efa->v4->co);
- VECCOPY(&varray[numfaces*18+9],efa->v4->no);
-
- VECCOPY(&varray[numfaces*18+12],efa->v1->co);
- VECCOPY(&varray[numfaces*18+15],efa->v1->no);
- numfaces++;
- }
- }
- }
- prevdraw = draw;
- prevmat = curmat;
- }
- GPU_buffer_unlock( buffer );
- if( prevdraw != 0 && numfaces > 0) {
- if( prevdraw==2 ) {
- glEnable(GL_POLYGON_STIPPLE);
- glPolygonStipple(stipple_quarttone);
- }
- GPU_enable_material(prevmat, NULL);
- glDrawArrays(GL_TRIANGLES,0,numfaces*3);
- if( prevdraw==2 ) {
- glDisable(GL_POLYGON_STIPPLE);
- }
- }
- GPU_buffer_unbind();
- }
- else {
- finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, 0, 0);
- }
- GPU_buffer_free(buffer,0);
+ finalDM->drawMappedFaces(finalDM, draw_em_fancy__setFaceOpts, 0, 0);
glFrontFace(GL_CCW);
glDisable(GL_LIGHTING);
@@ -6312,24 +5873,13 @@ static void bbs_mesh_solid_EM(Scene *scene, View3D *v3d, Object *ob, DerivedMesh
}
}
-static int bbs_mesh_solid_hide__setDrawOpts(void *userData, int index, int *drawSmooth_r)
-{
- Mesh *me = userData;
-
- if (!(me->mface[index].flag&ME_HIDE)) {
- return 1;
- } else {
- return 0;
- }
-}
-
-static int bbs_mesh_solid__setDrawOpts_legacy(void *userData, int index, int *drawSmooth_r)
+static int bbs_mesh_solid__setDrawOpts(void *userData, int index, int *drawSmooth_r)
{
WM_set_framebuffer_index_color(index+1);
return 1;
}
-static int bbs_mesh_solid_hide__setDrawOpts_legacy(void *userData, int index, int *drawSmooth_r)
+static int bbs_mesh_solid_hide__setDrawOpts(void *userData, int index, int *drawSmooth_r)
{
Mesh *me = userData;
@@ -6345,43 +5895,12 @@ static void bbs_mesh_solid(Scene *scene, View3D *v3d, Object *ob)
{
DerivedMesh *dm = mesh_get_derived_final(scene, ob, v3d->customdata_mask);
Mesh *me = (Mesh*)ob->data;
- MCol *colors;
- int i,j;
int face_sel_mode = (me->flag & ME_EDIT_PAINT_MASK) ? 1:0;
glColor3ub(0, 0, 0);
- if( !GPU_buffer_legacy(dm) ) {
- int *index = DM_get_face_data_layer(dm, CD_ORIGINDEX);
- int ind;
- colors = MEM_mallocN(dm->getNumFaces(dm)*sizeof(MCol)*4,"bbs_mesh_solid");
- for(i=0;i<dm->getNumFaces(dm);i++) {
- ind= ( index )? index[i]: i;
-
- if (face_sel_mode==0 || !(me->mface[ind].flag&ME_HIDE)) {
- unsigned int fbindex = index_to_framebuffer(ind+1);
- for(j=0;j<4;j++) {
- colors[i*4+j].b = ((fbindex)&0xFF);
- colors[i*4+j].g = (((fbindex)>>8)&0xFF);
- colors[i*4+j].r = (((fbindex)>>16)&0xFF);
- }
- }
- else {
- memset(&colors[i*4],0,sizeof(MCol)*4);
- }
- }
-
- CustomData_add_layer( &dm->faceData, CD_ID_MCOL, CD_ASSIGN, colors, dm->numFaceData );
- GPU_buffer_free(dm->drawObject->colors,0);
- dm->drawObject->colors = 0;
-
- if(face_sel_mode) dm->drawMappedFaces(dm, bbs_mesh_solid_hide__setDrawOpts, me, 1);
- else dm->drawMappedFaces(dm, NULL, me, 1);
- }
- else {
- if(face_sel_mode) dm->drawMappedFaces(dm, bbs_mesh_solid_hide__setDrawOpts_legacy, me, 0);
- else dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts_legacy, me, 0);
- }
+ if(face_sel_mode) dm->drawMappedFaces(dm, bbs_mesh_solid_hide__setDrawOpts, me, 0);
+ else dm->drawMappedFaces(dm, bbs_mesh_solid__setDrawOpts, me, 0);
dm->release(dm);
}