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:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-09-20 20:24:50 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2011-09-20 20:24:50 +0400
commit0169079bd1c3ce69690153321fb09c3647b9d930 (patch)
treef0ff89e8acdabe3d6e64dde5a7475aeddb55118e /source/blender/modifiers
parent219eeb3e54741340065bcef7188aa83ca5953fa3 (diff)
Get rid of c++ in blenkernel and modifiers
Also use guarded allocations for navmesh stuff.
Diffstat (limited to 'source/blender/modifiers')
-rw-r--r--source/blender/modifiers/CMakeLists.txt6
-rw-r--r--source/blender/modifiers/SConscript4
-rw-r--r--source/blender/modifiers/intern/MOD_navmesh.c (renamed from source/blender/modifiers/intern/MOD_navmesh.cpp)87
3 files changed, 52 insertions, 45 deletions
diff --git a/source/blender/modifiers/CMakeLists.txt b/source/blender/modifiers/CMakeLists.txt
index d8344a9e19b..fb4aa4ca4a5 100644
--- a/source/blender/modifiers/CMakeLists.txt
+++ b/source/blender/modifiers/CMakeLists.txt
@@ -65,7 +65,7 @@ set(SRC
intern/MOD_meshdeform.c
intern/MOD_mirror.c
intern/MOD_multires.c
- intern/MOD_navmesh.cpp
+ intern/MOD_navmesh.c
intern/MOD_none.c
intern/MOD_particleinstance.c
intern/MOD_particlesystem.c
@@ -117,11 +117,11 @@ if(NOT WITH_MOD_FLUID)
endif()
if(WITH_GAMEENGINE)
- # for MOD_navmesh.cpp
+ # for MOD_navmesh.c
add_definitions(-DWITH_GAMEENGINE)
list(APPEND INC
../gpu
- ../../../extern/recastnavigation/Recast/Include
+ ../../../extern/recastnavigation
)
endif()
diff --git a/source/blender/modifiers/SConscript b/source/blender/modifiers/SConscript
index da37539e950..77a2d577fb5 100644
--- a/source/blender/modifiers/SConscript
+++ b/source/blender/modifiers/SConscript
@@ -1,7 +1,7 @@
#!/usr/bin/python
Import ('env')
-sources = env.Glob('intern/*.c') + env.Glob('intern/*.cpp')
+sources = env.Glob('intern/*.c')
incs = '. ./intern'
incs += ' #/intern/guardedalloc #/intern/decimation/extern #/intern/bsp/extern #/intern/elbeem/extern #/extern/glew/include'
@@ -21,7 +21,7 @@ if env['BF_NO_ELBEEM']:
defs.append('DISABLE_ELBEEM')
if env['WITH_BF_GAMEENGINE']:
- incs += ' #/extern/recastnavigation/Recast/Include'
+ incs += ' #/extern/recastnavigation'
defs.append('WITH_GAMEENGINE')
env.BlenderLib ( libname = 'bf_modifiers', sources = sources,
diff --git a/source/blender/modifiers/intern/MOD_navmesh.cpp b/source/blender/modifiers/intern/MOD_navmesh.c
index 927085033fc..e05f91058f3 100644
--- a/source/blender/modifiers/intern/MOD_navmesh.cpp
+++ b/source/blender/modifiers/intern/MOD_navmesh.c
@@ -27,22 +27,17 @@
*/
#include <math.h>
-#ifdef WITH_GAMEENGINE
-# include "Recast.h"
-#endif
-
-extern "C"{
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
#ifdef WITH_GAMEENGINE
+# include "recast-capi.h"
# include "BKE_navmesh_conversion.h"
# include "GL/glew.h"
# include "GPU_buffers.h"
# include "GPU_draw.h"
#endif
-#include "DNA_mesh_types.h"
-#include "DNA_meshdata_types.h"
-
#include "BLI_math.h"
#include "BLI_utildefines.h"
@@ -53,12 +48,12 @@ extern "C"{
#include "BKE_customdata.h"
#include "MEM_guardedalloc.h"
-inline int bit(int a, int b)
+static inline int bit(int a, int b)
{
return (a & (1 << b)) >> b;
}
-inline void intToCol(int i, float* col)
+static inline void intToCol(int i, float* col)
{
int r = bit(i, 0) + bit(i, 3) * 2 + 1;
int g = bit(i, 1) + bit(i, 4) * 2 + 1;
@@ -69,12 +64,12 @@ inline void intToCol(int i, float* col)
}
-static void initData(ModifierData *md)
+static void initData(ModifierData *UNUSED(md))
{
/* NavMeshModifierData *nmmd = (NavMeshModifierData*) md; */ /* UNUSED */
}
-static void copyData(ModifierData *md, ModifierData *target)
+static void copyData(ModifierData *UNUSED(md), ModifierData *UNUSED(target))
{
/* NavMeshModifierData *nmmd = (NavMeshModifierData*) md; */
/* NavMeshModifierData *tnmmd = (NavMeshModifierData*) target; */
@@ -94,10 +89,12 @@ static void drawNavMeshColored(DerivedMesh *dm)
MVert *mvert = (MVert *)CustomData_get_layer(&dm->vertData, CD_MVERT);
MFace *mface = (MFace *)CustomData_get_layer(&dm->faceData, CD_MFACE);
int* polygonIdx = (int*)CustomData_get_layer(&dm->faceData, CD_RECAST);
- if (!polygonIdx)
- return;
const float BLACK_COLOR[3] = {0.f, 0.f, 0.f};
float col[3];
+
+ if (!polygonIdx)
+ return;
+
/*
//UI_ThemeColor(TH_WIRE);
glDisable(GL_LIGHTING);
@@ -138,23 +135,34 @@ static void drawNavMeshColored(DerivedMesh *dm)
static void navDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
{
+ (void) setDrawOptions;
+
drawNavMeshColored(dm);
}
static void navDM_drawFacesSolid(DerivedMesh *dm,
float (*partial_redraw_planes)[4],
- int fast, int (*setMaterial)(int, void *attribs))
+ int UNUSED(fast), int (*setMaterial)(int, void *attribs))
{
+ (void) partial_redraw_planes;
+ (void) setMaterial;
+
//drawFacesSolid_original(dm, partial_redraw_planes, fast, setMaterial);
drawNavMeshColored(dm);
}
#endif /* WITH_GAMEENGINE */
-static DerivedMesh *createNavMeshForVisualization(NavMeshModifierData *mmd,DerivedMesh *dm)
+static DerivedMesh *createNavMeshForVisualization(NavMeshModifierData *UNUSED(mmd), DerivedMesh *dm)
{
#ifdef WITH_GAMEENGINE
DerivedMesh *result;
int maxFaces = dm->getNumFaces(dm);
+ int *recastData;
+ int vertsPerPoly=0, nverts=0, ndtris=0, npolys=0;
+ float* verts=NULL;
+ unsigned short *dtris=NULL, *dmeshes=NULL, *polys=NULL;
+ int *dtrisToPolysMap=NULL, *dtrisToTrisMap=NULL, *trisToFacesMap=NULL;
+ int res;
result = CDDM_copy(dm);
if (!CustomData_has_layer(&result->faceData, CD_RECAST))
@@ -163,24 +171,21 @@ static DerivedMesh *createNavMeshForVisualization(NavMeshModifierData *mmd,Deriv
CustomData_add_layer_named(&result->faceData, CD_RECAST, CD_DUPLICATE,
sourceRecastData, maxFaces, "recastData");
}
- int *recastData = (int*)CustomData_get_layer(&result->faceData, CD_RECAST);
+ recastData = (int*)CustomData_get_layer(&result->faceData, CD_RECAST);
result->drawFacesTex = navDM_drawFacesTex;
result->drawFacesSolid = navDM_drawFacesSolid;
//process mesh
- int vertsPerPoly=0, nverts=0, ndtris=0, npolys=0;
- float* verts=NULL;
- unsigned short *dtris=NULL, *dmeshes=NULL, *polys=NULL;
- int *dtrisToPolysMap=NULL, *dtrisToTrisMap=NULL, *trisToFacesMap=NULL;
-
- bool res = buildNavMeshDataByDerivedMesh(dm, vertsPerPoly, nverts, verts, ndtris, dtris,
- npolys, dmeshes, polys, dtrisToPolysMap, dtrisToTrisMap,
- trisToFacesMap);
+ res = buildNavMeshDataByDerivedMesh(dm, &vertsPerPoly, &nverts, &verts, &ndtris, &dtris,
+ &npolys, &dmeshes, &polys, &dtrisToPolysMap, &dtrisToTrisMap,
+ &trisToFacesMap);
if (res)
{
+ size_t polyIdx;
+
//invalidate concave polygon
- for (size_t polyIdx=0; polyIdx<(size_t)npolys; polyIdx++)
+ for (polyIdx=0; polyIdx<(size_t)npolys; polyIdx++)
{
unsigned short* poly = &polys[polyIdx*2*vertsPerPoly];
if (!polyIsConvex(poly, vertsPerPoly, verts))
@@ -189,7 +194,9 @@ static DerivedMesh *createNavMeshForVisualization(NavMeshModifierData *mmd,Deriv
unsigned short *dmesh = &dmeshes[4*polyIdx];
unsigned short tbase = dmesh[2];
unsigned short tnum = dmesh[3];
- for (unsigned short ti=0; ti<tnum; ti++)
+ unsigned short ti;
+
+ for (ti=0; ti<tnum; ti++)
{
unsigned short triidx = dtrisToTrisMap[tbase+ti];
unsigned short faceidx = trisToFacesMap[triidx];
@@ -207,19 +214,19 @@ static DerivedMesh *createNavMeshForVisualization(NavMeshModifierData *mmd,Deriv
//clean up
if (verts!=NULL)
- delete verts;
+ MEM_freeN(verts);
if (dtris!=NULL)
- delete dtris;
+ MEM_freeN(dtris);
if (dmeshes!=NULL)
- delete dmeshes;
+ MEM_freeN(dmeshes);
if (polys!=NULL)
- delete polys;
+ MEM_freeN(polys);
if (dtrisToPolysMap!=NULL)
- delete dtrisToPolysMap;
+ MEM_freeN(dtrisToPolysMap);
if (dtrisToTrisMap!=NULL)
- delete dtrisToTrisMap;
+ MEM_freeN(dtrisToTrisMap);
if (trisToFacesMap!=NULL)
- delete trisToFacesMap;
+ MEM_freeN(trisToFacesMap);
return result;
#else // WITH_GAMEENGINE
@@ -237,11 +244,11 @@ static int isDisabled(ModifierData *md, int useRenderParams)
static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *derivedData,
- int useRenderParams, int isFinalCalc)
+ int UNUSED(useRenderParams), int UNUSED(isFinalCalc))
{
DerivedMesh *result = NULL;
NavMeshModifierData *nmmd = (NavMeshModifierData*) md;
- bool hasRecastData = CustomData_has_layer(&derivedData->faceData, CD_RECAST)>0;
+ int hasRecastData = CustomData_has_layer(&derivedData->faceData, CD_RECAST)>0;
if (ob->body_type!=OB_BODY_TYPE_NAVMESH || !hasRecastData )
{
//convert to nav mesh object:
@@ -255,10 +262,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
Mesh* obmesh = (Mesh *)ob->data;
if (obmesh)
{
+ int i;
int numFaces = obmesh->totface;
+ int* recastData;
CustomData_add_layer_named(&obmesh->fdata, CD_RECAST, CD_CALLOC, NULL, numFaces, "recastData");
- int* recastData = (int*)CustomData_get_layer(&obmesh->fdata, CD_RECAST);
- for (int i=0; i<numFaces; i++)
+ recastData = (int*)CustomData_get_layer(&obmesh->fdata, CD_RECAST);
+ for (i=0; i<numFaces; i++)
{
recastData[i] = i+1;
}
@@ -296,5 +305,3 @@ ModifierTypeInfo modifierType_NavMesh = {
/* foreachObjectLink */ 0,
/* foreachIDLink */ 0,
};
-
-};