Blender V2.61 - r43446
Defines | Functions | Variables

editderivedmesh.c File Reference

#include "GL/glew.h"
#include "BLI_utildefines.h"
#include "BLI_blenlib.h"
#include "BLI_edgehash.h"
#include "BLI_editVert.h"
#include "BLI_math.h"
#include "BLI_pbvh.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
#include "BKE_paint.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_curve_types.h"
#include "MEM_guardedalloc.h"
#include "GPU_buffers.h"
#include "GPU_draw.h"
#include "GPU_extensions.h"
#include "GPU_material.h"
#include <string.h>
#include <limits.h>
#include <math.h>

Go to the source code of this file.

Defines

#define PASSATTRIB(efa, eve, vert)
#define PASSATTRIB(efa, eve, vert)

Functions

static void emDM_foreachMappedVert (DerivedMesh *dm, void(*func)(void *userData, int index, float *co, float *no_f, short *no_s), void *userData)
static void emDM_foreachMappedEdge (DerivedMesh *dm, void(*func)(void *userData, int index, float *v0co, float *v1co), void *userData)
static void emDM_drawMappedEdges (DerivedMesh *dm, int(*setDrawOptions)(void *userData, int index), void *userData)
static void emDM_drawEdges (DerivedMesh *dm, int UNUSED(drawLooseEdges), int UNUSED(drawAllEdges))
static void emDM_drawMappedEdgesInterp (DerivedMesh *dm, int(*setDrawOptions)(void *userData, int index), void(*setDrawInterpOptions)(void *userData, int index, float t), void *userData)
static void emDM_drawUVEdges (DerivedMesh *dm)
static void emDM__calcFaceCent (EditFace *efa, float cent[3], float(*vertexCos)[3])
static void emDM_foreachMappedFaceCenter (DerivedMesh *dm, void(*func)(void *userData, int index, float *co, float *no), void *userData)
static void emDM_drawMappedFaces (DerivedMesh *dm, int(*setDrawOptions)(void *userData, int index, int *drawSmooth_r), int(*setMaterial)(int, void *attribs), int(*compareDrawOptions)(void *userData, int cur_index, int next_index), void *userData, int UNUSED(useColors))
static void emDM_drawFacesTex_common (DerivedMesh *dm, int(*drawParams)(MTFace *tface, int has_mcol, int matnr), int(*drawParamsMapped)(void *userData, int index), int(*compareDrawOptions)(void *userData, int cur_index, int next_index), void *userData)
static void emDM_drawFacesTex (DerivedMesh *dm, int(*setDrawOptions)(MTFace *tface, int has_mcol, int matnr), int(*compareDrawOptions)(void *userData, int cur_index, int next_index), void *userData)
static void emDM_drawMappedFacesTex (DerivedMesh *dm, int(*setDrawOptions)(void *userData, int index), int(*compareDrawOptions)(void *userData, int cur_index, int next_index), void *userData)
static void emDM_drawMappedFacesGLSL (DerivedMesh *dm, int(*setMaterial)(int, void *attribs), int(*setDrawOptions)(void *userData, int index), void *userData)
static void emDM_drawFacesGLSL (DerivedMesh *dm, int(*setMaterial)(int, void *attribs))
static void emDM_drawMappedFacesMat (DerivedMesh *dm, void(*setMaterial)(void *userData, int, void *attribs), int(*setFace)(void *userData, int index), void *userData)
static void emDM_getMinMax (DerivedMesh *dm, float min_r[3], float max_r[3])
static int emDM_getNumVerts (DerivedMesh *dm)
static int emDM_getNumEdges (DerivedMesh *dm)
static int emDM_getNumFaces (DerivedMesh *dm)
static void emDM_getVertCos (DerivedMesh *dm, float(*cos_r)[3])
static void emDM_getVert (DerivedMesh *dm, int index, MVert *vert_r)
static void emDM_getEdge (DerivedMesh *dm, int index, MEdge *edge_r)
static void emDM_getFace (DerivedMesh *dm, int index, MFace *face_r)
static void emDM_copyVertArray (DerivedMesh *dm, MVert *vert_r)
static void emDM_copyEdgeArray (DerivedMesh *dm, MEdge *edge_r)
static void emDM_copyFaceArray (DerivedMesh *dm, MFace *face_r)
static void * emDM_getFaceDataArray (DerivedMesh *dm, int type)
static void emDM_release (DerivedMesh *dm)
DerivedMesheditmesh_get_derived (EditMesh *em, float(*vertexCos)[3])

Variables

GLubyte stipple_quarttone [128]

Detailed Description

Definition in file editderivedmesh.c.


Define Documentation

#define PASSATTRIB (   efa,
  eve,
  vert 
)
Value:
{                                           \
    if (attribs.totorco) {                                                      \
        float *orco = attribs.orco.array[eve->tmp.l];                           \
        glVertexAttrib3fvARB(attribs.orco.glIndex, orco);                       \
    }                                                                           \
    for (b = 0; b < attribs.tottface; b++) {                                    \
        MTFace *_tf = (MTFace*)((char*)efa->data + attribs.tface[b].emOffset);  \
        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);                       \
    }                                                                           \
}

Referenced by ccgDM_drawMappedFacesGLSL(), ccgDM_drawMappedFacesMat(), emDM_drawMappedFacesGLSL(), and emDM_drawMappedFacesMat().

#define PASSATTRIB (   efa,
  eve,
  vert 
)
Value:
{                                           \
    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);                       \
    }                                                                           \
}

Function Documentation

DerivedMesh* editmesh_get_derived ( EditMesh em,
float(*)  vertexCos[3] 
)

Definition at line 1193 of file editderivedmesh.c.

References add_v3_v3(), BLI_countlist(), CD_CALLOC, CD_MDEFORMVERT, DerivedMesh::copyEdgeArray, DerivedMesh::copyFaceArray, DerivedMesh::copyVertArray, CustomData_em_get(), CustomData_has_layer(), EditVert::data, EditMeshDerivedMesh::dm, DM_add_vert_layer(), DM_init(), DM_set_vert_data(), DM_TYPE_EDITMESH, DerivedMesh::drawEdges, DerivedMesh::drawFacesGLSL, DerivedMesh::drawFacesTex, DerivedMesh::drawMappedEdges, DerivedMesh::drawMappedEdgesInterp, DerivedMesh::drawMappedFaces, DerivedMesh::drawMappedFacesGLSL, DerivedMesh::drawMappedFacesMat, DerivedMesh::drawMappedFacesTex, DerivedMesh::drawUVEdges, EditMesh::edges, EditMeshDerivedMesh::em, emDM_copyEdgeArray(), emDM_copyFaceArray(), emDM_copyVertArray(), emDM_drawEdges(), emDM_drawFacesGLSL(), emDM_drawFacesTex(), emDM_drawMappedEdges(), emDM_drawMappedEdgesInterp(), emDM_drawMappedFaces(), emDM_drawMappedFacesGLSL(), emDM_drawMappedFacesMat(), emDM_drawMappedFacesTex(), emDM_drawUVEdges(), emDM_foreachMappedEdge(), emDM_foreachMappedFaceCenter(), emDM_foreachMappedVert(), emDM_getEdge(), emDM_getFace(), emDM_getFaceDataArray(), emDM_getMinMax(), emDM_getNumEdges(), emDM_getNumFaces(), emDM_getNumVerts(), emDM_getVert(), emDM_getVertCos(), emDM_release(), EditMeshDerivedMesh::faceNos, EditMesh::faces, ListBase::first, DerivedMesh::foreachMappedEdge, DerivedMesh::foreachMappedFaceCenter, DerivedMesh::foreachMappedVert, DerivedMesh::getEdge, DerivedMesh::getFace, DerivedMesh::getFaceDataArray, DerivedMesh::getMinMax, DerivedMesh::getNumEdges, DerivedMesh::getNumFaces, DerivedMesh::getNumVerts, DerivedMesh::getVert, DerivedMesh::getVertCos, i, if(), EditVert::l, MEM_callocN(), MEM_mallocN(), EditFace::next, EditVert::next, normal_quad_v3(), normal_tri_v3(), normalize_v3(), normalize_v3_v3(), NULL, DerivedMesh::release, EditVert::tmp, EditFace::v1, EditFace::v2, EditFace::v3, EditFace::v4, EditMesh::vdata, EditMeshDerivedMesh::vertexCos, EditMeshDerivedMesh::vertexNos, and EditMesh::verts.

Referenced by editmesh_calc_modifiers(), editmesh_get_derived_base(), and editmesh_get_first_deform_matrices().

static void emDM__calcFaceCent ( EditFace efa,
float  cent[3],
float(*)  vertexCos[3] 
) [static]
static void emDM_copyEdgeArray ( DerivedMesh dm,
MEdge edge_r 
) [static]
static void emDM_copyFaceArray ( DerivedMesh dm,
MFace face_r 
) [static]
static void emDM_copyVertArray ( DerivedMesh dm,
MVert vert_r 
) [static]
static void emDM_drawEdges ( DerivedMesh dm,
int   UNUSEDdrawLooseEdges,
int   UNUSEDdrawAllEdges 
) [static]

Definition at line 140 of file editderivedmesh.c.

References emDM_drawMappedEdges(), and NULL.

Referenced by editmesh_get_derived().

static void emDM_drawFacesGLSL ( DerivedMesh dm,
int(*)(int, void *attribs)  setMaterial 
) [static]

Definition at line 776 of file editderivedmesh.c.

References DerivedMesh::drawMappedFacesGLSL, and NULL.

Referenced by editmesh_get_derived().

static void emDM_drawFacesTex ( DerivedMesh dm,
int(*)(MTFace *tface, int has_mcol, int matnr)  setDrawOptions,
int(*)(void *userData, int cur_index, int next_index)  compareDrawOptions,
void *  userData 
) [static]

Definition at line 622 of file editderivedmesh.c.

References compareDrawOptions(), emDM_drawFacesTex_common(), and NULL.

Referenced by editmesh_get_derived().

static void emDM_drawFacesTex_common ( DerivedMesh dm,
int(*)(MTFace *tface, int has_mcol, int matnr)  drawParams,
int(*)(void *userData, int index)  drawParamsMapped,
int(*)(void *userData, int cur_index, int next_index)  compareDrawOptions,
void *  userData 
) [static]
static void emDM_drawMappedEdges ( DerivedMesh dm,
int(*)(void *userData, int index)  setDrawOptions,
void *  userData 
) [static]
static void emDM_drawMappedEdgesInterp ( DerivedMesh dm,
int(*)(void *userData, int index)  setDrawOptions,
void(*)(void *userData, int index, float t)  setDrawInterpOptions,
void *  userData 
) [static]
static void emDM_drawMappedFaces ( DerivedMesh dm,
int(*)(void *userData, int index, int *drawSmooth_r)  setDrawOptions,
int(*)(int, void *attribs)  setMaterial,
int(*)(void *userData, int cur_index, int next_index)  compareDrawOptions,
void *  userData,
int   UNUSEDuseColors 
) [static]
static void emDM_drawMappedFacesGLSL ( DerivedMesh dm,
int(*)(int, void *attribs)  setMaterial,
int(*)(void *userData, int index)  setDrawOptions,
void *  userData 
) [static]
static void emDM_drawMappedFacesMat ( DerivedMesh dm,
void(*)(void *userData, int, void *attribs)  setMaterial,
int(*)(void *userData, int index)  setFace,
void *  userData 
) [static]
static void emDM_drawMappedFacesTex ( DerivedMesh dm,
int(*)(void *userData, int index)  setDrawOptions,
int(*)(void *userData, int cur_index, int next_index)  compareDrawOptions,
void *  userData 
) [static]

Definition at line 631 of file editderivedmesh.c.

References compareDrawOptions(), emDM_drawFacesTex_common(), and NULL.

Referenced by editmesh_get_derived().

static void emDM_drawUVEdges ( DerivedMesh dm) [static]
static void emDM_foreachMappedEdge ( DerivedMesh dm,
void(*)(void *userData, int index, float *v0co, float *v1co)  func,
void *  userData 
) [static]
static void emDM_foreachMappedFaceCenter ( DerivedMesh dm,
void(*)(void *userData, int index, float *co, float *no)  func,
void *  userData 
) [static]
static void emDM_foreachMappedVert ( DerivedMesh dm,
void(*)(void *userData, int index, float *co, float *no_f, short *no_s)  func,
void *  userData 
) [static]
static void emDM_getEdge ( DerivedMesh dm,
int  index,
MEdge edge_r 
) [static]
static void emDM_getFace ( DerivedMesh dm,
int  index,
MFace face_r 
) [static]
static void* emDM_getFaceDataArray ( DerivedMesh dm,
int  type 
) [static]
static void emDM_getMinMax ( DerivedMesh dm,
float  min_r[3],
float  max_r[3] 
) [static]
static int emDM_getNumEdges ( DerivedMesh dm) [static]

Definition at line 946 of file editderivedmesh.c.

References BLI_countlist(), EditMesh::edges, and EditMeshDerivedMesh::em.

Referenced by editmesh_get_derived().

static int emDM_getNumFaces ( DerivedMesh dm) [static]

Definition at line 953 of file editderivedmesh.c.

References BLI_countlist(), EditMeshDerivedMesh::em, and EditMesh::faces.

Referenced by editmesh_get_derived().

static int emDM_getNumVerts ( DerivedMesh dm) [static]

Definition at line 939 of file editderivedmesh.c.

References BLI_countlist(), EditMeshDerivedMesh::em, and EditMesh::verts.

Referenced by editmesh_get_derived().

static void emDM_getVert ( DerivedMesh dm,
int  index,
MVert vert_r 
) [static]
static void emDM_getVertCos ( DerivedMesh dm,
float(*)  cos_r[3] 
) [static]
static void emDM_release ( DerivedMesh dm) [static]

Variable Documentation

GLubyte stipple_quarttone[128]

Definition at line 82 of file glutil.c.