diff --git a/Recast/Include/Recast.h b/Recast/Include/Recast.h index ad24713..2eda512 100644 --- a/Recast/Include/Recast.h +++ b/Recast/Include/Recast.h @@ -231,7 +231,7 @@ public: enum rcSpanFlags { RC_WALKABLE = 0x01, - RC_REACHABLE = 0x02, + RC_LEDGE = 0x02, }; // If heightfield region ID has the following bit set, the region is on border area @@ -466,16 +466,6 @@ void rcFilterLedgeSpans(const int walkableHeight, void rcFilterWalkableLowHeightSpans(int walkableHeight, rcHeightfield& solid); -// Marks spans which are reachable from any of the topmost spans. -// Params: -// walkableHeight - (in) minimum height where the agent can still walk -// walkableClimb - (in) maximum height between grid cells the agent can climb -// solid - (in/out) heightfield describing the solid space -// Returns false if operation ran out of memory. -bool rcMarkReachableSpans(const int walkableHeight, - const int walkableClimb, - rcHeightfield& solid); - // Builds compact representation of the heightfield. // Params: // walkableHeight - (in) minimum height where the agent can still walk diff --git a/Recast/Include/RecastDebugDraw.h b/Recast/Include/RecastDebugDraw.h index 27ba0a1..095c349 100644 --- a/Recast/Include/RecastDebugDraw.h +++ b/Recast/Include/RecastDebugDraw.h @@ -19,11 +19,49 @@ #ifndef RECAST_DEBUGDRAW_H #define RECAST_DEBUGDRAW_H +enum rcDebugDrawPrimitives +{ + RC_DRAW_POINTS, + RC_DRAW_LINES, + RC_DRAW_TRIS, + RC_DRAW_QUADS, +}; + +struct rcDebugDraw +{ + virtual void begin(rcDebugDrawPrimitives prim, int nverts, float size = 1.0f) = 0; + virtual void vertex(const float* pos, unsigned int color) = 0; + virtual void vertex(const float x, const float y, const float z, unsigned int color) = 0; + virtual void end() = 0; +}; + +inline unsigned int RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + return (r) | (g << 8) | (b << 16) | (a << 24); +} + +inline unsigned int RGBAf(float fr, float fg, float fb, float fa) +{ + unsigned char r = (unsigned char)(fr*255.0f); + unsigned char g = (unsigned char)(fg*255.0f); + unsigned char b = (unsigned char)(fb*255.0f); + unsigned char a = (unsigned char)(fa*255.0f); + return RGBA(r,g,b,a); +} + inline int bit(int a, int b) { return (a & (1 << b)) >> b; } +inline unsigned int intToCol(int i, int a) +{ + int r = bit(i, 0) + bit(i, 3) * 2 + 1; + int g = bit(i, 1) + bit(i, 4) * 2 + 1; + int b = bit(i, 2) + bit(i, 5) * 2 + 1; + return RGBA(r*63,g*63,b*63,a); +} + inline void intToCol(int i, float* col) { int r = bit(i, 0) + bit(i, 3) * 2 + 1; @@ -34,26 +72,28 @@ inline void intToCol(int i, float* col) col[2] = 1 - b*63.0f/255.0f; } -void rcDebugDrawHeightfieldSolid(const struct rcHeightfield& hf); -void rcDebugDrawHeightfieldWalkable(const struct rcHeightfield& hf); +void rcDebugDrawHeightfieldSolid(rcDebugDraw* dd, const struct rcHeightfield& hf); +void rcDebugDrawHeightfieldWalkable(rcDebugDraw* dd, const struct rcHeightfield& hf); -void rcDebugDrawMesh(const float* verts, int nverts, const int* tris, const float* normals, int ntris, const unsigned char* flags); -void rcDebugDrawMeshSlope(const float* verts, int nverts, const int* tris, const float* normals, int ntris, const float walkableSlopeAngle); +void rcDebugDrawMesh(rcDebugDraw* dd, const float* verts, int nverts, const int* tris, const float* normals, int ntris, const unsigned char* flags); +void rcDebugDrawMeshSlope(rcDebugDraw* dd, const float* verts, int nverts, const int* tris, const float* normals, int ntris, const float walkableSlopeAngle); -void rcDebugDrawCompactHeightfieldSolid(const struct rcCompactHeightfield& chf); -void rcDebugDrawCompactHeightfieldRegions(const struct rcCompactHeightfield& chf); -void rcDebugDrawCompactHeightfieldDistance(const struct rcCompactHeightfield& chf); +void rcDebugDrawCompactHeightfieldSolid(rcDebugDraw* dd, const struct rcCompactHeightfield& chf); +void rcDebugDrawCompactHeightfieldRegions(rcDebugDraw* dd, const struct rcCompactHeightfield& chf); +void rcDebugDrawCompactHeightfieldDistance(rcDebugDraw* dd, const struct rcCompactHeightfield& chf); -void rcDebugDrawRegionConnections(const struct rcContourSet& cset, const float alpha = 1.0f); -void rcDebugDrawRawContours(const struct rcContourSet& cset, const float alpha = 1.0f); -void rcDebugDrawContours(const struct rcContourSet& cset, const float alpha = 1.0f); -void rcDebugDrawPolyMesh(const struct rcPolyMesh& mesh); -void rcDebugDrawPolyMeshDetail(const struct rcPolyMeshDetail& dmesh); +void rcDebugDrawRegionConnections(rcDebugDraw* dd, const struct rcContourSet& cset, const float alpha = 1.0f); +void rcDebugDrawRawContours(rcDebugDraw* dd, const struct rcContourSet& cset, const float alpha = 1.0f); +void rcDebugDrawContours(rcDebugDraw* dd, const struct rcContourSet& cset, const float alpha = 1.0f); +void rcDebugDrawPolyMesh(rcDebugDraw* dd, const struct rcPolyMesh& mesh); +void rcDebugDrawPolyMeshDetail(rcDebugDraw* dd, const struct rcPolyMeshDetail& dmesh); -void rcDebugDrawCylinderWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col); -void rcDebugDrawBoxWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col); -void rcDebugDrawBox(float minx, float miny, float minz, float maxx, float maxy, float maxz, +void rcDebugDrawCylinderWire(rcDebugDraw* dd, float minx, float miny, float minz, + float maxx, float maxy, float maxz, const float* col); +void rcDebugDrawBoxWire(rcDebugDraw* dd, float minx, float miny, float minz, + float maxx, float maxy, float maxz, const float* col); +void rcDebugDrawBox(rcDebugDraw* dd, float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col1, const float* col2); -void rcDrawArc(const float* p0, const float* p1); +void rcDrawArc(rcDebugDraw* dd, const float* p0, const float* p1, const float* col, float lineWidth); #endif // RECAST_DEBUGDRAW_H diff --git a/Recast/Source/RecastDebugDraw.cpp b/Recast/Source/RecastDebugDraw.cpp index a88d668..bf5bd30 100644 --- a/Recast/Source/RecastDebugDraw.cpp +++ b/Recast/Source/RecastDebugDraw.cpp @@ -19,91 +19,107 @@ #define _USE_MATH_DEFINES #include #include "RecastDebugDraw.h" -#include "SDL.h" -#include "SDL_opengl.h" #include "MeshLoaderObj.h" #include "Recast.h" -void rcDebugDrawMesh(const float* verts, int nverts, - const int* tris, const float* normals, int ntris, - const unsigned char* flags) -{ - glBegin(GL_TRIANGLES); - for (int i = 0; i < ntris*3; i += 3) - { - float a = (2+normals[i+0]+normals[i+1])/4 * 0.6f; - if (flags && !flags[i/3]) - glColor3f(a,a*0.3f,a*0.1f); - else - glColor3f(a,a,a); - glVertex3fv(&verts[tris[i]*3]); - glVertex3fv(&verts[tris[i+1]*3]); - glVertex3fv(&verts[tris[i+2]*3]); - } - glEnd(); +inline unsigned int dark(unsigned int col) +{ + return ((col >> 1) & 0x007f7f7f) | (col & 0xff000000); } -void rcDebugDrawMeshSlope(const float* verts, int nverts, +void rcDebugDrawMesh(rcDebugDraw* dd, const float* verts, int nverts, + const int* tris, const float* normals, int ntris, + const unsigned char* flags) +{ + dd->begin(RC_DRAW_TRIS, ntris); + for (int i = 0; i < ntris*3; i += 3) + { + unsigned int color; + unsigned char a = (unsigned char)(150*(2+normals[i+0]+normals[i+1])/4); + if (flags && !flags[i/3]) + color = RGBA(a,a/4,a/16,255); + else + color = RGBA(a,a,a,255); + + dd->vertex(&verts[tris[i+0]*3], color); + dd->vertex(&verts[tris[i+1]*3], color); + dd->vertex(&verts[tris[i+2]*3], color); + } + dd->end(); +} + +void rcDebugDrawMeshSlope(rcDebugDraw* dd, const float* verts, int nverts, const int* tris, const float* normals, int ntris, const float walkableSlopeAngle) { const float walkableThr = cosf(walkableSlopeAngle/180.0f*(float)M_PI); - - glBegin(GL_TRIANGLES); + + dd->begin(RC_DRAW_TRIS, ntris); for (int i = 0; i < ntris*3; i += 3) { const float* norm = &normals[i]; - float a = (2+norm[0]+norm[1])/4; - if (norm[1] > walkableThr) - glColor3f(a,a,a); + unsigned int color; + unsigned char a = (unsigned char)(255*(2+normals[i+0]+normals[i+1])/4); + if (norm[1] < walkableThr) + color = RGBA(a,a/4,a/16,255); else - glColor3f(a,a*0.3f,a*0.1f); - glVertex3fv(&verts[tris[i]*3]); - glVertex3fv(&verts[tris[i+1]*3]); - glVertex3fv(&verts[tris[i+2]*3]); + color = RGBA(a,a,a,255); + + dd->vertex(&verts[tris[i+0]*3], color); + dd->vertex(&verts[tris[i+1]*3], color); + dd->vertex(&verts[tris[i+2]*3], color); } - glEnd(); + dd->end(); } -void drawBoxWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col) +static void drawBoxWire(rcDebugDraw* dd, + float minx, float miny, float minz, + float maxx, float maxy, float maxz, + const float* col) { - glColor4fv(col); + // Submits 24 vertices. + + unsigned int color = RGBAf(col[0],col[1],col[2],col[3]); // Top - glVertex3f(minx, miny, minz); - glVertex3f(maxx, miny, minz); - glVertex3f(maxx, miny, minz); - glVertex3f(maxx, miny, maxz); - glVertex3f(maxx, miny, maxz); - glVertex3f(minx, miny, maxz); - glVertex3f(minx, miny, maxz); - glVertex3f(minx, miny, minz); + dd->vertex(minx, miny, minz, color); + dd->vertex(maxx, miny, minz, color); + dd->vertex(maxx, miny, minz, color); + dd->vertex(maxx, miny, maxz, color); + dd->vertex(maxx, miny, maxz, color); + dd->vertex(minx, miny, maxz, color); + dd->vertex(minx, miny, maxz, color); + dd->vertex(minx, miny, minz, color); // bottom - glVertex3f(minx, maxy, minz); - glVertex3f(maxx, maxy, minz); - glVertex3f(maxx, maxy, minz); - glVertex3f(maxx, maxy, maxz); - glVertex3f(maxx, maxy, maxz); - glVertex3f(minx, maxy, maxz); - glVertex3f(minx, maxy, maxz); - glVertex3f(minx, maxy, minz); + dd->vertex(minx, maxy, minz, color); + dd->vertex(maxx, maxy, minz, color); + dd->vertex(maxx, maxy, minz, color); + dd->vertex(maxx, maxy, maxz, color); + dd->vertex(maxx, maxy, maxz, color); + dd->vertex(minx, maxy, maxz, color); + dd->vertex(minx, maxy, maxz, color); + dd->vertex(minx, maxy, minz, color); // Sides - glVertex3f(minx, miny, minz); - glVertex3f(minx, maxy, minz); - glVertex3f(maxx, miny, minz); - glVertex3f(maxx, maxy, minz); - glVertex3f(maxx, miny, maxz); - glVertex3f(maxx, maxy, maxz); - glVertex3f(minx, miny, maxz); - glVertex3f(minx, maxy, maxz); + dd->vertex(minx, miny, minz, color); + dd->vertex(minx, maxy, minz, color); + dd->vertex(maxx, miny, minz, color); + dd->vertex(maxx, maxy, minz, color); + dd->vertex(maxx, miny, maxz, color); + dd->vertex(maxx, maxy, maxz, color); + dd->vertex(minx, miny, maxz, color); + dd->vertex(minx, maxy, maxz, color); } -void drawBox(float minx, float miny, float minz, float maxx, float maxy, float maxz, - const float* col1, const float* col2) +static void drawBox(rcDebugDraw* dd, + float minx, float miny, float minz, + float maxx, float maxy, float maxz, + const float* col1, const float* col2) { - float verts[8*3] = + // Submits 24 vertices. + + const float verts[8*3] = { minx, miny, minz, maxx, miny, minz, @@ -132,18 +148,21 @@ void drawBox(float minx, float miny, float minz, float maxx, float maxy, float m for (int i = 0; i < 6; ++i) { float d = dim[*in]; in++; + unsigned int color; if (i == 0) - glColor4f(d*col2[0],d*col2[1],d*col2[2], col2[3]); + color = RGBAf(d*col2[0],d*col2[1],d*col2[2], col2[3]); else - glColor4f(d*col1[0],d*col1[1],d*col1[2], col1[3]); - glVertex3fv(&verts[*in*3]); in++; - glVertex3fv(&verts[*in*3]); in++; - glVertex3fv(&verts[*in*3]); in++; - glVertex3fv(&verts[*in*3]); in++; + color = RGBAf(d*col1[0],d*col1[1],d*col1[2], col1[3]); + dd->vertex(&verts[*in*3], color); in++; + dd->vertex(&verts[*in*3], color); in++; + dd->vertex(&verts[*in*3], color); in++; + dd->vertex(&verts[*in*3], color); in++; } } -void rcDebugDrawCylinderWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col) +void rcDebugDrawCylinderWire(rcDebugDraw* dd, float minx, float miny, float minz, + float maxx, float maxy, float maxz, + const float* col) { static const int NUM_SEG = 16; float dir[NUM_SEG*2]; @@ -159,40 +178,56 @@ void rcDebugDrawCylinderWire(float minx, float miny, float minz, float maxx, flo const float rx = (maxx - minx)/2; const float rz = (maxz - minz)/2; - glColor4fv(col); - glBegin(GL_LINES); + unsigned int color = RGBAf(col[0],col[1],col[2],col[3]); + + const int nv = NUM_SEG*4 + 4*2; + + dd->begin(RC_DRAW_LINES, nv); + for (int i = 0, j=NUM_SEG-1; i < NUM_SEG; j=i++) { - glVertex3f(cx+dir[j*2+0]*rx, miny, cz+dir[j*2+1]*rz); - glVertex3f(cx+dir[i*2+0]*rx, miny, cz+dir[i*2+1]*rz); - glVertex3f(cx+dir[j*2+0]*rx, maxy, cz+dir[j*2+1]*rz); - glVertex3f(cx+dir[i*2+0]*rx, maxy, cz+dir[i*2+1]*rz); + dd->vertex(cx+dir[j*2+0]*rx, miny, cz+dir[j*2+1]*rz, color); + dd->vertex(cx+dir[i*2+0]*rx, miny, cz+dir[i*2+1]*rz, color); + dd->vertex(cx+dir[j*2+0]*rx, maxy, cz+dir[j*2+1]*rz, color); + dd->vertex(cx+dir[i*2+0]*rx, maxy, cz+dir[i*2+1]*rz, color); } for (int i = 0; i < NUM_SEG; i += NUM_SEG/4) { - glVertex3f(cx+dir[i*2+0]*rx, miny, cz+dir[i*2+1]*rz); - glVertex3f(cx+dir[i*2+0]*rx, maxy, cz+dir[i*2+1]*rz); + dd->vertex(cx+dir[i*2+0]*rx, miny, cz+dir[i*2+1]*rz, color); + dd->vertex(cx+dir[i*2+0]*rx, maxy, cz+dir[i*2+1]*rz, color); } - glEnd(); + + dd->end(); } -void rcDebugDrawBoxWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col) +void rcDebugDrawBoxWire(rcDebugDraw* dd, float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col) { - glBegin(GL_LINES); - drawBoxWire(minx, miny, minz, maxx, maxy, maxz, col); - glEnd(); + dd->begin(RC_DRAW_LINES, 24, 1.0f); + drawBoxWire(dd, minx, miny, minz, maxx, maxy, maxz, col); + dd->end(); } -void rcDebugDrawBox(float minx, float miny, float minz, float maxx, float maxy, float maxz, +void rcDebugDrawBox(rcDebugDraw* dd, float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col1, const float* col2) { - glBegin(GL_QUADS); - drawBox(minx, miny, minz, maxx, maxy, maxz, col1, col2); - glEnd(); + dd->begin(RC_DRAW_QUADS,24); + drawBox(dd, minx, miny, minz, maxx, maxy, maxz, col1, col2); + dd->end(); } +static int getSpanCount(const rcHeightfield& hf) +{ + const int w = hf.width; + const int h = hf.height; + int spanCount = 0; + for (int y = 0; y < h; ++y) + for (int x = 0; x < w; ++x) + for (rcSpan* s = hf.spans[x + y*w]; s; s = s->next) + spanCount++; + return spanCount; +} -void rcDebugDrawHeightfieldSolid(const rcHeightfield& hf) +void rcDebugDrawHeightfieldSolid(rcDebugDraw* dd, const rcHeightfield& hf) { static const float col0[4] = { 1,1,1,1 }; @@ -203,7 +238,10 @@ void rcDebugDrawHeightfieldSolid(const rcHeightfield& hf) const int w = hf.width; const int h = hf.height; - glBegin(GL_QUADS); + const int spanCount = getSpanCount(hf); + const int nv = spanCount*24; + + dd->begin(RC_DRAW_QUADS, nv); for (int y = 0; y < h; ++y) { @@ -214,18 +252,20 @@ void rcDebugDrawHeightfieldSolid(const rcHeightfield& hf) const rcSpan* s = hf.spans[x + y*w]; while (s) { - drawBox(fx, orig[1]+s->smin*ch, fz, fx+cs, orig[1] + s->smax*ch, fz+cs, col0, col0); + drawBox(dd, fx, orig[1]+s->smin*ch, fz, fx+cs, orig[1] + s->smax*ch, fz+cs, col0, col0); s = s->next; } } } - glEnd(); + dd->end(); } -void rcDebugDrawHeightfieldWalkable(const rcHeightfield& hf) +void rcDebugDrawHeightfieldWalkable(rcDebugDraw* dd, const rcHeightfield& hf) { - static const float col0[4] = { 1,1,1,1 }; - static const float col1[4] = { 0.25f,0.44f,0.5f,1 }; + static const float colb[4] = {0.85f,0.85f,0.85f,1 }; // Base + static const float col0[4] = {0.5f, 0.75f, 0.85f,1}; // Culled + static const float col1[4] = {0.3f, 0.55f, 0.65f, 1}; // Walkable + static const float col2[4] = {0.15f, 0.4f, 0.5f,1}; // Ledge const float* orig = hf.bmin; const float cs = hf.cs; @@ -234,7 +274,10 @@ void rcDebugDrawHeightfieldWalkable(const rcHeightfield& hf) const int w = hf.width; const int h = hf.height; - glBegin(GL_QUADS); + const int spanCount = getSpanCount(hf); + const int nv = spanCount*24; + + dd->begin(RC_DRAW_QUADS, nv); for (int y = 0; y < h; ++y) { @@ -245,23 +288,29 @@ void rcDebugDrawHeightfieldWalkable(const rcHeightfield& hf) const rcSpan* s = hf.spans[x + y*w]; while (s) { - bool csel = (s->flags & 0x1) == 0; - drawBox(fx, orig[1]+s->smin*ch, fz, fx+cs, orig[1] + s->smax*ch, fz+cs, col0, csel ? col0 : col1); + const float* c = col0; + if (s->flags & RC_LEDGE) + c = col2; + else if (s->flags & RC_WALKABLE) + c = col1; + drawBox(dd, fx, orig[1]+s->smin*ch, fz, fx+cs, orig[1] + s->smax*ch, fz+cs, colb, c); s = s->next; } } } - glEnd(); + + dd->end(); } -void rcDebugDrawCompactHeightfieldSolid(const rcCompactHeightfield& chf) +void rcDebugDrawCompactHeightfieldSolid(rcDebugDraw* dd, const rcCompactHeightfield& chf) { const float cs = chf.cs; const float ch = chf.ch; - glColor3ub(64,112,128); - - glBegin(GL_QUADS); + unsigned int color = RGBA(0,192,255,64); + + dd->begin(RC_DRAW_QUADS, chf.spanCount*4); + for (int y = 0; y < chf.height; ++y) { for (int x = 0; x < chf.width; ++x) @@ -274,26 +323,23 @@ void rcDebugDrawCompactHeightfieldSolid(const rcCompactHeightfield& chf) { const rcCompactSpan& s = chf.spans[i]; const float fy = chf.bmin[1] + (s.y+1)*ch; - glVertex3f(fx, fy, fz); - glVertex3f(fx, fy, fz+cs); - glVertex3f(fx+cs, fy, fz+cs); - glVertex3f(fx+cs, fy, fz); + dd->vertex(fx, fy, fz, color); + dd->vertex(fx, fy, fz+cs, color); + dd->vertex(fx+cs, fy, fz+cs, color); + dd->vertex(fx+cs, fy, fz, color); } } } - glEnd(); + dd->end(); } -void rcDebugDrawCompactHeightfieldRegions(const rcCompactHeightfield& chf) +void rcDebugDrawCompactHeightfieldRegions(rcDebugDraw* dd, const rcCompactHeightfield& chf) { const float cs = chf.cs; const float ch = chf.ch; - float col[4] = { 1,1,1,1 }; - - glDepthMask(GL_TRUE); - - glBegin(GL_QUADS); + dd->begin(RC_DRAW_QUADS, chf.spanCount*4); + for (int y = 0; y < chf.height; ++y) { for (int x = 0; x < chf.width; ++x) @@ -305,40 +351,36 @@ void rcDebugDrawCompactHeightfieldRegions(const rcCompactHeightfield& chf) for (unsigned i = c.index, ni = c.index+c.count; i < ni; ++i) { const rcCompactSpan& s = chf.spans[i]; - - if (chf.reg[i]) - { - intToCol(chf.reg[i], col); - glColor4fv(col); - } - else - { - glColor4ub(0,0,0,64); - } - const float fy = chf.bmin[1] + (s.y)*ch; + unsigned int color; + if (chf.reg[i]) + color = intToCol(chf.reg[i], 192); + else + color = RGBA(0,0,0,64); - glVertex3f(fx, fy, fz); - glVertex3f(fx, fy, fz+cs); - glVertex3f(fx+cs, fy, fz+cs); - glVertex3f(fx+cs, fy, fz); + dd->vertex(fx, fy, fz, color); + dd->vertex(fx, fy, fz+cs, color); + dd->vertex(fx+cs, fy, fz+cs, color); + dd->vertex(fx+cs, fy, fz, color); } } } - glEnd(); + + dd->end(); } -void rcDebugDrawCompactHeightfieldDistance(const rcCompactHeightfield& chf) +void rcDebugDrawCompactHeightfieldDistance(rcDebugDraw* dd, const rcCompactHeightfield& chf) { const float cs = chf.cs; const float ch = chf.ch; - + float maxd = chf.maxDistance; if (maxd < 1.0f) maxd = 1; - float dscale = 1.0f / maxd; + const float dscale = 255.0f / maxd; + + dd->begin(RC_DRAW_QUADS, chf.spanCount*4); - glBegin(GL_QUADS); for (int y = 0; y < chf.height; ++y) { for (int x = 0; x < chf.width; ++x) @@ -351,16 +393,16 @@ void rcDebugDrawCompactHeightfieldDistance(const rcCompactHeightfield& chf) { const rcCompactSpan& s = chf.spans[i]; const float fy = chf.bmin[1] + (s.y+1)*ch; - float cd = (float)chf.dist[i] * dscale; - glColor3f(cd, cd, cd); - glVertex3f(fx, fy, fz); - glVertex3f(fx, fy, fz+cs); - glVertex3f(fx+cs, fy, fz+cs); - glVertex3f(fx+cs, fy, fz); + const unsigned char cd = (unsigned char)(chf.dist[i] * dscale); + const unsigned int color = RGBA(cd,cd,cd,255); + dd->vertex(fx, fy, fz, color); + dd->vertex(fx, fy, fz+cs, color); + dd->vertex(fx+cs, fy, fz+cs, color); + dd->vertex(fx+cs, fy, fz, color); } } } - glEnd(); + dd->end(); } static void getContourCenter(const rcContour* cont, const float* orig, float cs, float ch, float* center) @@ -396,36 +438,39 @@ static const rcContour* findContourFromSet(const rcContourSet& cset, unsigned sh return 0; } -static void drawArc(const float* p0, const float* p1) +static const int NUM_ARC_PTS = 8; + +static void drawArc(rcDebugDraw* dd, const float* p0, const float* p1, unsigned int color) { - static const int NPTS = 8; - float pts[NPTS*3]; + // Submits NPTS*2 vertices. + float pts[NUM_ARC_PTS*3]; float dir[3]; vsub(dir, p1, p0); const float len = sqrtf(vdistSqr(p0, p1)); - for (int i = 0; i < NPTS; ++i) + for (int i = 0; i < NUM_ARC_PTS; ++i) { - float u = (float)i / (float)(NPTS-1); + float u = (float)i / (float)(NUM_ARC_PTS-1); float* p = &pts[i*3]; p[0] = p0[0] + dir[0] * u; p[1] = p0[1] + dir[1] * u + (len/4) * (1-rcSqr(u*2-1)); p[2] = p0[2] + dir[2] * u; } - for (int i = 0; i < NPTS-1; ++i) + for (int i = 0; i < NUM_ARC_PTS-1; ++i) { - glVertex3fv(&pts[i*3]); - glVertex3fv(&pts[(i+1)*3]); + dd->vertex(&pts[i*3], color); + dd->vertex(&pts[(i+1)*3], color); } } -void rcDrawArc(const float* p0, const float* p1) +void rcDrawArc(rcDebugDraw* dd, const float* p0, const float* p1, const float* col, float lineWidth) { - glBegin(GL_LINES); - drawArc(p0, p1); - glEnd(); + const unsigned int color = RGBAf(col[0],col[1],col[2],col[3]); + dd->begin(RC_DRAW_LINES, NUM_ARC_PTS*2, lineWidth); + drawArc(dd, p0, p1, color); + dd->end(); } -void rcDebugDrawRegionConnections(const rcContourSet& cset, const float alpha) +void rcDebugDrawRegionConnections(rcDebugDraw* dd, const rcContourSet& cset, const float alpha) { const float* orig = cset.bmin; const float cs = cset.cs; @@ -434,10 +479,23 @@ void rcDebugDrawRegionConnections(const rcContourSet& cset, const float alpha) // Draw centers float pos[3], pos2[3]; - glColor4ub(0,0,0,196); + unsigned int color = RGBA(0,0,0,196); + + int nv = 0; + for (int i = 0; i < cset.nconts; ++i) + { + const rcContour* cont = &cset.conts[i]; + for (int j = 0; j < cont->nverts; ++j) + { + const int* v = &cont->verts[j*4]; + if (v[3] == 0 || (unsigned short)v[3] < cont->reg) continue; + if (findContourFromSet(cset, (unsigned short)v[3])) + nv += NUM_ARC_PTS; + } + } + + dd->begin(RC_DRAW_LINES, nv, 2.0f); - glLineWidth(2.0f); - glBegin(GL_LINES); for (int i = 0; i < cset.nconts; ++i) { const rcContour* cont = &cset.conts[i]; @@ -450,158 +508,203 @@ void rcDebugDrawRegionConnections(const rcContourSet& cset, const float alpha) if (cont2) { getContourCenter(cont2, orig, cs, ch, pos2); - drawArc(pos, pos2); + drawArc(dd, pos, pos2, color); } } } - glEnd(); - - float col[4] = { 1,1,1,alpha }; - glPointSize(7.0f); - glBegin(GL_POINTS); + dd->end(); + + unsigned char a = (unsigned char)(alpha * 255.0f); + + dd->begin(RC_DRAW_POINTS, nv, 7.0f); + for (int i = 0; i < cset.nconts; ++i) { const rcContour* cont = &cset.conts[i]; - intToCol(cont->reg, col); - col[0] *= 0.5f; - col[1] *= 0.5f; - col[2] *= 0.5f; - glColor4fv(col); + unsigned int color = dark(intToCol(cont->reg,a)); getContourCenter(cont, orig, cs, ch, pos); - glVertex3fv(pos); + dd->vertex(pos, color); } - glEnd(); - - - glLineWidth(1.0f); - glPointSize(1.0f); + dd->end(); } -void rcDebugDrawRawContours(const rcContourSet& cset, const float alpha) +void rcDebugDrawRawContours(rcDebugDraw* dd, const rcContourSet& cset, const float alpha) { const float* orig = cset.bmin; const float cs = cset.cs; const float ch = cset.ch; - float col[4] = { 1,1,1,alpha }; - glLineWidth(2.0f); - glPointSize(2.0f); + + const unsigned char a = (unsigned char)(alpha*255.0f); + + int nv = 0; for (int i = 0; i < cset.nconts; ++i) { const rcContour& c = cset.conts[i]; - intToCol(c.reg, col); - glColor4fv(col); - glBegin(GL_LINE_LOOP); + nv += c.nrverts; + } + + dd->begin(RC_DRAW_LINES, nv*2, 2.0f); + + for (int i = 0; i < cset.nconts; ++i) + { + const rcContour& c = cset.conts[i]; + unsigned int color = intToCol(c.reg, a); + for (int j = 0; j < c.nrverts; ++j) { const int* v = &c.rverts[j*4]; float fx = orig[0] + v[0]*cs; float fy = orig[1] + (v[1]+1+(i&1))*ch; float fz = orig[2] + v[2]*cs; - glVertex3f(fx,fy,fz); + dd->vertex(fx,fy,fz,color); + if (j > 0) + dd->vertex(fx,fy,fz,color); } - glEnd(); + // Loop last segment. + const int* v = &c.rverts[0]; + float fx = orig[0] + v[0]*cs; + float fy = orig[1] + (v[1]+1+(i&1))*ch; + float fz = orig[2] + v[2]*cs; + dd->vertex(fx,fy,fz,color); + } + dd->end(); - col[0] *= 0.5f; - col[1] *= 0.5f; - col[2] *= 0.5f; - glColor4fv(col); + dd->begin(RC_DRAW_POINTS, nv, 2.0f); - glBegin(GL_POINTS); + for (int i = 0; i < cset.nconts; ++i) + { + const rcContour& c = cset.conts[i]; + unsigned int color = dark(intToCol(c.reg, a)); + for (int j = 0; j < c.nrverts; ++j) { const int* v = &c.rverts[j*4]; - float off = 0; + unsigned int colv = color; if (v[3] & RC_BORDER_VERTEX) { - glColor4ub(255,255,255,255); + colv = RGBA(255,255,255,a); off = ch*2; } - else - { - glColor4fv(col); - } float fx = orig[0] + v[0]*cs; float fy = orig[1] + (v[1]+1+(i&1))*ch + off; float fz = orig[2] + v[2]*cs; - glVertex3f(fx,fy,fz); + dd->vertex(fx,fy,fz, colv); } - glEnd(); } - glLineWidth(1.0f); - glPointSize(1.0f); + dd->end(); } -void rcDebugDrawContours(const rcContourSet& cset, const float alpha) +void rcDebugDrawContours(rcDebugDraw* dd, const rcContourSet& cset, const float alpha) { const float* orig = cset.bmin; const float cs = cset.cs; const float ch = cset.ch; - float col[4] = { 1,1,1,1 }; - glLineWidth(2.5f); - glPointSize(3.0f); + + const unsigned char a = (unsigned char)(alpha*255.0f); + + int nv = 0; for (int i = 0; i < cset.nconts; ++i) { const rcContour& c = cset.conts[i]; - intToCol(c.reg, col); - glColor4fv(col); + nv += c.nverts; + } + + dd->begin(RC_DRAW_LINES, nv*2, 2.5f); + + for (int i = 0; i < cset.nconts; ++i) + { + const rcContour& c = cset.conts[i]; + unsigned int color = intToCol(c.reg, a); - glBegin(GL_LINE_LOOP); for (int j = 0; j < c.nverts; ++j) { const int* v = &c.verts[j*4]; float fx = orig[0] + v[0]*cs; float fy = orig[1] + (v[1]+1+(i&1))*ch; float fz = orig[2] + v[2]*cs; - glVertex3f(fx,fy,fz); + dd->vertex(fx,fy,fz, color); + if (j > 0) + dd->vertex(fx,fy,fz, color); } - glEnd(); + // Loop last segment + const int* v = &c.verts[0]; + float fx = orig[0] + v[0]*cs; + float fy = orig[1] + (v[1]+1+(i&1))*ch; + float fz = orig[2] + v[2]*cs; + dd->vertex(fx,fy,fz, color); + } + dd->end(); - col[0] *= 0.5f; - col[1] *= 0.5f; - col[2] *= 0.5f; - glColor4fv(col); - glBegin(GL_POINTS); + dd->begin(RC_DRAW_POINTS, nv, 3.0f); + + for (int i = 0; i < cset.nconts; ++i) + { + const rcContour& c = cset.conts[i]; + unsigned int color = dark(intToCol(c.reg, a)); for (int j = 0; j < c.nverts; ++j) { const int* v = &c.verts[j*4]; float off = 0; + unsigned int colv = color; if (v[3] & RC_BORDER_VERTEX) { - glColor4ub(255,255,255,255); + colv = RGBA(255,255,255,a); off = ch*2; } - else - { - glColor4fv(col); - } float fx = orig[0] + v[0]*cs; float fy = orig[1] + (v[1]+1+(i&1))*ch + off; float fz = orig[2] + v[2]*cs; - glVertex3f(fx,fy,fz); + dd->vertex(fx,fy,fz, colv); } - glEnd(); } - glLineWidth(1.0f); - glPointSize(1.0f); + dd->end(); } -void rcDebugDrawPolyMesh(const struct rcPolyMesh& mesh) +void rcDebugDrawPolyMesh(rcDebugDraw* dd, const struct rcPolyMesh& mesh) { const int nvp = mesh.nvp; const float cs = mesh.cs; const float ch = mesh.ch; const float* orig = mesh.bmin; - float col[4] = {1,1,1,0.75f}; - glBegin(GL_TRIANGLES); + + int nvt = 0; // triangle verts + int nvb = 0; // boundary edge verts + int nvn = 0; // neighbour edge verts for (int i = 0; i < mesh.npolys; ++i) { const unsigned short* p = &mesh.polys[i*nvp*2]; - intToCol(i, col); - glColor4fv(col); + // Tris + for (int j = 2; j < nvp; ++j) + { + if (p[j] == 0xffff) break; + nvt += 3; + } + // boundary edges + for (int j = 0; j < nvp; ++j) + { + if (p[j] == 0xffff) break; + if (p[nvp+j] == 0xffff) continue; + nvb += 2; + } + // neighbour edges + for (int j = 0; j < nvp; ++j) + { + if (p[j] == 0xffff) break; + if (p[nvp+j] != 0xffff) continue; + nvb += 2; + } + } + + dd->begin(RC_DRAW_TRIS, nvt); + + for (int i = 0; i < mesh.npolys; ++i) + { + const unsigned short* p = &mesh.polys[i*nvp*2]; + unsigned int color = intToCol(i, 192); unsigned short vi[3]; for (int j = 2; j < nvp; ++j) { @@ -615,91 +718,121 @@ void rcDebugDrawPolyMesh(const struct rcPolyMesh& mesh) const float x = orig[0] + v[0]*cs; const float y = orig[1] + (v[1]+1)*ch; const float z = orig[2] + v[2]*cs; - glVertex3f(x, y, z); + dd->vertex(x,y,z, color); } } } - glEnd(); + dd->end(); - // Draw tri boundaries - glColor4ub(0,48,64,32); - glLineWidth(1.5f); - glBegin(GL_LINES); + // Draw neighbours edges + const unsigned int coln = RGBA(0,48,64,32); + dd->begin(RC_DRAW_LINES, nvn, 1.5f); for (int i = 0; i < mesh.npolys; ++i) { - const unsigned short* poly = &mesh.polys[i*nvp*2]; + const unsigned short* p = &mesh.polys[i*nvp*2]; for (int j = 0; j < nvp; ++j) { - if (poly[j] == 0xffff) break; - if (poly[nvp+j] == 0xffff) continue; + if (p[j] == 0xffff) break; + if (p[nvp+j] == 0xffff) continue; int vi[2]; - vi[0] = poly[j]; - if (j+1 >= nvp || poly[j+1] == 0xffff) - vi[1] = poly[0]; + vi[0] = p[j]; + if (j+1 >= nvp || p[j+1] == 0xffff) + vi[1] = p[0]; else - vi[1] = poly[j+1]; + vi[1] = p[j+1]; for (int k = 0; k < 2; ++k) { const unsigned short* v = &mesh.verts[vi[k]*3]; const float x = orig[0] + v[0]*cs; const float y = orig[1] + (v[1]+1)*ch + 0.1f; const float z = orig[2] + v[2]*cs; - glVertex3f(x, y, z); + dd->vertex(x, y, z, coln); } } } - glEnd(); + dd->end(); - // Draw boundaries - glLineWidth(2.5f); - glColor4ub(0,48,64,220); - glBegin(GL_LINES); + // Draw boundary edges + const unsigned int colb = RGBA(0,48,64,220); + dd->begin(RC_DRAW_LINES, nvb, 2.5f); for (int i = 0; i < mesh.npolys; ++i) { - const unsigned short* poly = &mesh.polys[i*nvp*2]; + const unsigned short* p = &mesh.polys[i*nvp*2]; for (int j = 0; j < nvp; ++j) { - if (poly[j] == 0xffff) break; - if (poly[nvp+j] != 0xffff) continue; + if (p[j] == 0xffff) break; + if (p[nvp+j] != 0xffff) continue; int vi[2]; - vi[0] = poly[j]; - if (j+1 >= nvp || poly[j+1] == 0xffff) - vi[1] = poly[0]; + vi[0] = p[j]; + if (j+1 >= nvp || p[j+1] == 0xffff) + vi[1] = p[0]; else - vi[1] = poly[j+1]; + vi[1] = p[j+1]; for (int k = 0; k < 2; ++k) { const unsigned short* v = &mesh.verts[vi[k]*3]; const float x = orig[0] + v[0]*cs; const float y = orig[1] + (v[1]+1)*ch + 0.1f; const float z = orig[2] + v[2]*cs; - glVertex3f(x, y, z); + dd->vertex(x, y, z, colb); } } } - glEnd(); - glLineWidth(1.0f); + dd->end(); - glPointSize(3.0f); - glColor4ub(0,0,0,220); - glBegin(GL_POINTS); + dd->begin(RC_DRAW_POINTS, mesh.nverts, 3.0f); + const unsigned int colv = RGBA(0,0,0,220); for (int i = 0; i < mesh.nverts; ++i) { const unsigned short* v = &mesh.verts[i*3]; const float x = orig[0] + v[0]*cs; const float y = orig[1] + (v[1]+1)*ch + 0.1f; const float z = orig[2] + v[2]*cs; - glVertex3f(x, y, z); + dd->vertex(x,y,z, colv); } - glEnd(); - glPointSize(1.0f); + dd->end(); } -void rcDebugDrawPolyMeshDetail(const struct rcPolyMeshDetail& dmesh) +void rcDebugDrawPolyMeshDetail(rcDebugDraw* dd, const struct rcPolyMeshDetail& dmesh) { - float col[4] = {1,1,1,0.75f}; + int nvt = 0; + int nvi = 0; + int nve = 0; + int nvv = 0; + + for (int i = 0; i < dmesh.nmeshes; ++i) + { + const unsigned short* m = &dmesh.meshes[i*4]; + const unsigned short nverts = m[1]; + const unsigned short btris = m[2]; + const unsigned short ntris = m[3]; + const unsigned char* tris = &dmesh.tris[btris*4]; + + nvt += (int)ntris*3; + nvv += (int)nverts; + + for (int j = 0; j < ntris; ++j) + { + const unsigned char* t = &tris[j*4]; + for (int k = 0, kp = 2; k < 3; kp=k++) + { + unsigned char ef = (t[3] >> (kp*2)) & 0x3; + if (ef == 0) + { + if (t[kp] < t[k]) + nvi += 2; + } + else + { + nve += 2; + } + } + } + + } + + dd->begin(RC_DRAW_TRIS, nvt); - glBegin(GL_TRIANGLES); for (int i = 0; i < dmesh.nmeshes; ++i) { const unsigned short* m = &dmesh.meshes[i*4]; @@ -709,21 +842,20 @@ void rcDebugDrawPolyMeshDetail(const struct rcPolyMeshDetail& dmesh) const float* verts = &dmesh.verts[bverts*3]; const unsigned char* tris = &dmesh.tris[btris*4]; - intToCol(i, col); - glColor4fv(col); + unsigned int color = intToCol(i, 192); + for (int j = 0; j < ntris; ++j) { - glVertex3fv(&verts[tris[j*4+0]*3]); - glVertex3fv(&verts[tris[j*4+1]*3]); - glVertex3fv(&verts[tris[j*4+2]*3]); + dd->vertex(&verts[tris[j*4+0]*3], color); + dd->vertex(&verts[tris[j*4+1]*3], color); + dd->vertex(&verts[tris[j*4+2]*3], color); } } - glEnd(); + dd->end(); // Internal edges. - glLineWidth(1.0f); - glColor4ub(0,0,0,64); - glBegin(GL_LINES); + dd->begin(RC_DRAW_LINES, nvi, 1.0f); + const unsigned int coli = RGBA(0,0,0,64); for (int i = 0; i < dmesh.nmeshes; ++i) { const unsigned short* m = &dmesh.meshes[i*4]; @@ -744,19 +876,18 @@ void rcDebugDrawPolyMeshDetail(const struct rcPolyMeshDetail& dmesh) // Internal edge if (t[kp] < t[k]) { - glVertex3fv(&verts[t[kp]*3]); - glVertex3fv(&verts[t[k]*3]); + dd->vertex(&verts[t[kp]*3], coli); + dd->vertex(&verts[t[k]*3], coli); } } } } } - glEnd(); + dd->end(); // External edges. - glLineWidth(2.0f); - glColor4ub(0,0,0,64); - glBegin(GL_LINES); + dd->begin(RC_DRAW_LINES, 2.0f); + const unsigned int cole = RGBA(0,0,0,64); for (int i = 0; i < dmesh.nmeshes; ++i) { const unsigned short* m = &dmesh.meshes[i*4]; @@ -775,18 +906,16 @@ void rcDebugDrawPolyMeshDetail(const struct rcPolyMeshDetail& dmesh) if (ef != 0) { // Ext edge - glVertex3fv(&verts[t[kp]*3]); - glVertex3fv(&verts[t[k]*3]); + dd->vertex(&verts[t[kp]*3], cole); + dd->vertex(&verts[t[k]*3], cole); } } } } - glEnd(); + dd->end(); - glLineWidth(1.0f); - - glPointSize(3.0f); - glBegin(GL_POINTS); + dd->begin(RC_DRAW_POINTS, nvv, 3.0f); + const unsigned int colv = RGBA(0,0,0,64); for (int i = 0; i < dmesh.nmeshes; ++i) { const unsigned short* m = &dmesh.meshes[i*4]; @@ -794,11 +923,7 @@ void rcDebugDrawPolyMeshDetail(const struct rcPolyMeshDetail& dmesh) const unsigned short nverts = m[1]; const float* verts = &dmesh.verts[bverts*3]; for (int j = 0; j < nverts; ++j) - { - glColor4ub(0,0,0,64); - glVertex3fv(&verts[j*3]); - } + dd->vertex(&verts[j*3], colv); } - glEnd(); - glPointSize(1.0f); + dd->end(); } diff --git a/Recast/Source/RecastFilter.cpp b/Recast/Source/RecastFilter.cpp index cd1b4aa..658316b 100644 --- a/Recast/Source/RecastFilter.cpp +++ b/Recast/Source/RecastFilter.cpp @@ -84,8 +84,7 @@ void rcFilterLedgeSpans(const int walkableHeight, // The current span is close to a ledge if the drop to any // neighbour span is less than the walkableClimb. if (minh < -walkableClimb) - s->flags &= ~RC_WALKABLE; - + s->flags |= RC_LEDGE; } } } @@ -129,121 +128,3 @@ void rcFilterWalkableLowHeightSpans(int walkableHeight, if (rcGetBuildTimes()) rcGetBuildTimes()->filterWalkable += rcGetDeltaTimeUsec(startTime, endTime); } - - -struct rcReachableSeed -{ - inline void set(int ix, int iy, rcSpan* is) - { - x = (unsigned short)ix; - y = (unsigned short)iy; - s = is; - } - unsigned short x, y; - rcSpan* s; -}; - -bool rcMarkReachableSpans(const int walkableHeight, - const int walkableClimb, - rcHeightfield& solid) -{ - const int w = solid.width; - const int h = solid.height; - const int MAX_HEIGHT = 0xffff; - - rcTimeVal startTime = rcGetPerformanceTimer(); - - // Build navigable space. - const int MAX_SEEDS = w*h; - rcReachableSeed* stack = new rcReachableSeed[MAX_SEEDS]; - if (!stack) - { - if (rcGetLog()) - rcGetLog()->log(RC_LOG_ERROR, "rcMarkReachableSpans: Out of memory 'stack' (%d).", MAX_SEEDS); - return false; - } - int stackSize = 0; - - for (int y = 0; y < h; ++y) - { - for (int x = 0; x < w; ++x) - { - rcSpan* topSpan = solid.spans[x + y*w]; - if (!topSpan) - continue; - while (topSpan->next) - topSpan = topSpan->next; - - // If the span is not walkable, skip it. - if ((topSpan->flags & RC_WALKABLE) == 0) - continue; - // If the span has been visited already, skip it. - if (topSpan->flags & RC_REACHABLE) - continue; - - // Start flood fill. - topSpan->flags |= RC_REACHABLE; - stackSize = 0; - stack[stackSize].set(x, y, topSpan); - stackSize++; - - while (stackSize) - { - // Pop a seed from the stack. - stackSize--; - rcReachableSeed cur = stack[stackSize]; - - const int bot = (int)(cur.s->smax); - const int top = cur.s->next ? (int)(cur.s->next->smin) : MAX_HEIGHT; - - // Visit neighbours in all 4 directions. - for (int dir = 0; dir < 4; ++dir) - { - int dx = (int)cur.x + rcGetDirOffsetX(dir); - int dy = (int)cur.y + rcGetDirOffsetY(dir); - // Skip neighbour which are out of bounds. - if (dx < 0 || dy < 0 || dx >= w || dy >= h) - continue; - for (rcSpan* ns = solid.spans[dx + dy*w]; ns; ns = ns->next) - { - // Skip neighbour if it is not walkable. - if ((ns->flags & RC_WALKABLE) == 0) - continue; - // Skip the neighbour if it has been visited already. - if (ns->flags & RC_REACHABLE) - continue; - - const int nbot = (int)ns->smax; - const int ntop = ns->next ? (int)ns->next->smin : MAX_HEIGHT; - // Skip neightbour if the gap between the spans is too small. - if (rcMin(top,ntop) - rcMax(bot,nbot) < walkableHeight) - continue; - // Skip neightbour if the climb height to the neighbour is too high. - if (rcAbs(nbot - bot) >= walkableClimb) - continue; - - // This neighbour has not been visited yet. - // Mark it as reachable and add it to the seed stack. - ns->flags |= RC_REACHABLE; - if (stackSize < MAX_SEEDS) - { - stack[stackSize].set(dx, dy, ns); - stackSize++; - } - } - } - } - } - } - - delete [] stack; - - rcTimeVal endTime = rcGetPerformanceTimer(); - -// if (rcGetLog()) -// rcGetLog()->log(RC_LOG_PROGRESS, "Mark reachable: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f); - if (rcGetBuildTimes()) - rcGetBuildTimes()->filterMarkReachable += rcGetDeltaTimeUsec(startTime, endTime); - - return true; -} diff --git a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast index 8e5f86f..0bd308c 100755 Binary files a/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast and b/RecastDemo/Bin/Recast.app/Contents/MacOS/Recast differ diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser index b5b3acd..798b920 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.pbxuser @@ -21,7 +21,7 @@ 6B0249EF10037C0C00CF7107 /* DetourTileNavMesh.cpp:1 */, 6B024AC01004AB3900CF7107 /* DetourTileNavMesh.cpp:1 */, 6B9D0932102722F0009B1A6C /* RecastTexture.cpp:301 */, - 6B9D09921028542A009B1A6C /* RecastDebugDraw.cpp:698 */, + 6B9D09921028542A009B1A6C /* RecastDebugDraw.cpp:29 */, 6B93FEFF1030443300F0C0DA /* Recast.cpp:280 */, 6B9301521032F08300F0C0DA /* Recast.cpp:280 */, 6B4C5232104FC1F600E88FB8 /* Recast.cpp:280 */, @@ -223,6 +223,163 @@ 6B8DE73D10B01BBF00DF20FB /* PBXTextBookmark */ = 6B8DE73D10B01BBF00DF20FB /* PBXTextBookmark */; 6B8DE73E10B01BBF00DF20FB /* PBXTextBookmark */ = 6B8DE73E10B01BBF00DF20FB /* PBXTextBookmark */; 6B8DE74910B01BE900DF20FB /* PBXTextBookmark */ = 6B8DE74910B01BE900DF20FB /* PBXTextBookmark */; + 6B8DE74B10B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE74B10B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE74C10B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE74C10B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE74D10B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE74D10B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE74E10B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE74E10B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE74F10B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE74F10B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75010B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE75010B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75110B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE75110B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75210B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE75210B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75310B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE75310B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75410B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE75410B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75510B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE75510B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75610B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE75610B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75710B01EEA00DF20FB /* PBXTextBookmark */ = 6B8DE75710B01EEA00DF20FB /* PBXTextBookmark */; + 6B8DE75810B01F1A00DF20FB /* PBXTextBookmark */ = 6B8DE75810B01F1A00DF20FB /* PBXTextBookmark */; + 6B8DE75910B01F1A00DF20FB /* PBXTextBookmark */ = 6B8DE75910B01F1A00DF20FB /* PBXTextBookmark */; + 6B8DE75A10B01F1A00DF20FB /* PBXTextBookmark */ = 6B8DE75A10B01F1A00DF20FB /* PBXTextBookmark */; + 6B8DE75B10B01F1A00DF20FB /* PBXTextBookmark */ = 6B8DE75B10B01F1A00DF20FB /* PBXTextBookmark */; + 6B8DE75D10B01F9900DF20FB /* PBXTextBookmark */ = 6B8DE75D10B01F9900DF20FB /* PBXTextBookmark */; + 6B8DE75E10B01F9900DF20FB /* PBXTextBookmark */ = 6B8DE75E10B01F9900DF20FB /* PBXTextBookmark */; + 6B8DE75F10B01F9900DF20FB /* PBXTextBookmark */ = 6B8DE75F10B01F9900DF20FB /* PBXTextBookmark */; + 6B8DE76010B01F9900DF20FB /* PBXTextBookmark */ = 6B8DE76010B01F9900DF20FB /* PBXTextBookmark */; + 6B8DE76410B022B200DF20FB /* PBXTextBookmark */ = 6B8DE76410B022B200DF20FB /* PBXTextBookmark */; + 6B8DE76510B022B200DF20FB /* PBXTextBookmark */ = 6B8DE76510B022B200DF20FB /* PBXTextBookmark */; + 6B8DE76610B022B200DF20FB /* PBXTextBookmark */ = 6B8DE76610B022B200DF20FB /* PBXTextBookmark */; + 6B8DE76710B022B200DF20FB /* PBXTextBookmark */ = 6B8DE76710B022B200DF20FB /* PBXTextBookmark */; + 6B8DE76810B022B200DF20FB /* PBXTextBookmark */ = 6B8DE76810B022B200DF20FB /* PBXTextBookmark */; + 6B8DE76910B022B200DF20FB /* PBXTextBookmark */ = 6B8DE76910B022B200DF20FB /* PBXTextBookmark */; + 6B8DE76D10B0243500DF20FB /* PBXTextBookmark */ = 6B8DE76D10B0243500DF20FB /* PBXTextBookmark */; + 6B8DE76E10B0243500DF20FB /* PBXTextBookmark */ = 6B8DE76E10B0243500DF20FB /* PBXTextBookmark */; + 6B8DE76F10B0243500DF20FB /* PBXTextBookmark */ = 6B8DE76F10B0243500DF20FB /* PBXTextBookmark */; + 6B8DE77010B0243500DF20FB /* PBXTextBookmark */ = 6B8DE77010B0243500DF20FB /* PBXTextBookmark */; + 6B8DE77110B0243500DF20FB /* PBXTextBookmark */ = 6B8DE77110B0243500DF20FB /* PBXTextBookmark */; + 6B8DE77210B0243500DF20FB /* PBXTextBookmark */ = 6B8DE77210B0243500DF20FB /* PBXTextBookmark */; + 6B8DE77410B0244F00DF20FB /* PBXTextBookmark */ = 6B8DE77410B0244F00DF20FB /* PBXTextBookmark */; + 6B8DE77610B0247200DF20FB /* PBXTextBookmark */ = 6B8DE77610B0247200DF20FB /* PBXTextBookmark */; + 6B8DE77810B024C000DF20FB /* PBXTextBookmark */ = 6B8DE77810B024C000DF20FB /* PBXTextBookmark */; + 6B8DE77A10B024F800DF20FB /* PBXTextBookmark */ = 6B8DE77A10B024F800DF20FB /* PBXTextBookmark */; + 6B8DE77C10B0251A00DF20FB /* PBXTextBookmark */ = 6B8DE77C10B0251A00DF20FB /* PBXTextBookmark */; + 6B8DE77E10B0252100DF20FB /* PBXTextBookmark */ = 6B8DE77E10B0252100DF20FB /* PBXTextBookmark */; + 6B8DE78010B0254B00DF20FB /* PBXTextBookmark */ = 6B8DE78010B0254B00DF20FB /* PBXTextBookmark */; + 6B8DE78210B0255500DF20FB /* PBXTextBookmark */ = 6B8DE78210B0255500DF20FB /* PBXTextBookmark */; + 6B8DE78410B0258200DF20FB /* PBXTextBookmark */ = 6B8DE78410B0258200DF20FB /* PBXTextBookmark */; + 6B8DE78610B0259B00DF20FB /* PBXTextBookmark */ = 6B8DE78610B0259B00DF20FB /* PBXTextBookmark */; + 6B8DE78810B0306200DF20FB /* PBXTextBookmark */ = 6B8DE78810B0306200DF20FB /* PBXTextBookmark */; + 6B8DE78A10B0308600DF20FB /* PBXTextBookmark */ = 6B8DE78A10B0308600DF20FB /* PBXTextBookmark */; + 6B8DE78C10B030A600DF20FB /* PBXTextBookmark */ = 6B8DE78C10B030A600DF20FB /* PBXTextBookmark */; + 6B8DE78E10B030EE00DF20FB /* PBXTextBookmark */ = 6B8DE78E10B030EE00DF20FB /* PBXTextBookmark */; + 6B8DE79610B0348000DF20FB /* PBXTextBookmark */ = 6B8DE79610B0348000DF20FB /* PBXTextBookmark */; + 6B8DE79710B0348000DF20FB /* PBXTextBookmark */ = 6B8DE79710B0348000DF20FB /* PBXTextBookmark */; + 6B8DE79A10B034C600DF20FB /* PBXTextBookmark */ = 6B8DE79A10B034C600DF20FB /* PBXTextBookmark */; + 6B8DE79B10B0374C00DF20FB /* PBXTextBookmark */ = 6B8DE79B10B0374C00DF20FB /* PBXTextBookmark */; + 6B8DE79C10B037C700DF20FB /* PBXTextBookmark */ = 6B8DE79C10B037C700DF20FB /* PBXTextBookmark */; + 6B8DE79D10B037C700DF20FB /* PBXTextBookmark */ = 6B8DE79D10B037C700DF20FB /* PBXTextBookmark */; + 6B8DE79E10B0404100DF20FB /* PBXTextBookmark */ = 6B8DE79E10B0404100DF20FB /* PBXTextBookmark */; + 6B8DE79F10B0404100DF20FB /* PBXTextBookmark */ = 6B8DE79F10B0404100DF20FB /* PBXTextBookmark */; + 6B8DE7A010B0404100DF20FB /* PBXTextBookmark */ = 6B8DE7A010B0404100DF20FB /* PBXTextBookmark */; + 6B8DE7A110B0404100DF20FB /* PBXTextBookmark */ = 6B8DE7A110B0404100DF20FB /* PBXTextBookmark */; + 6B8DE7A210B0404100DF20FB /* PBXTextBookmark */ = 6B8DE7A210B0404100DF20FB /* PBXTextBookmark */; + 6B8DE7A310B0412B00DF20FB /* PBXTextBookmark */ = 6B8DE7A310B0412B00DF20FB /* PBXTextBookmark */; + 6B8DE7A410B0412B00DF20FB /* PBXTextBookmark */ = 6B8DE7A410B0412B00DF20FB /* PBXTextBookmark */; + 6B8DE7A510B0412B00DF20FB /* PBXTextBookmark */ = 6B8DE7A510B0412B00DF20FB /* PBXTextBookmark */; + 6B8DE7A610B0412B00DF20FB /* PBXTextBookmark */ = 6B8DE7A610B0412B00DF20FB /* PBXTextBookmark */; + 6B8DE7A710B0412B00DF20FB /* PBXTextBookmark */ = 6B8DE7A710B0412B00DF20FB /* PBXTextBookmark */; + 6B8DE7A810B0412B00DF20FB /* PBXTextBookmark */ = 6B8DE7A810B0412B00DF20FB /* PBXTextBookmark */; + 6B8DE7A910B0412B00DF20FB /* PBXTextBookmark */ = 6B8DE7A910B0412B00DF20FB /* PBXTextBookmark */; + 6B8DE7AA10B0463F00DF20FB /* PBXTextBookmark */ = 6B8DE7AA10B0463F00DF20FB /* PBXTextBookmark */; + 6B8DE7AB10B0463F00DF20FB /* PBXTextBookmark */ = 6B8DE7AB10B0463F00DF20FB /* PBXTextBookmark */; + 6B8DE7AC10B0463F00DF20FB /* PBXTextBookmark */ = 6B8DE7AC10B0463F00DF20FB /* PBXTextBookmark */; + 6B8DE7AD10B0463F00DF20FB /* PBXTextBookmark */ = 6B8DE7AD10B0463F00DF20FB /* PBXTextBookmark */; + 6B8DE7AE10B0463F00DF20FB /* PBXTextBookmark */ = 6B8DE7AE10B0463F00DF20FB /* PBXTextBookmark */; + 6B8DE7AF10B0479B00DF20FB /* PBXTextBookmark */ = 6B8DE7AF10B0479B00DF20FB /* PBXTextBookmark */; + 6B8DE7C510B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7C510B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7C610B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7C610B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7C710B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7C710B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7C810B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7C810B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7C910B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7C910B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7CA10B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7CA10B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7CB10B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7CB10B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7CC10B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7CC10B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7CD10B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7CD10B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7CE10B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7CE10B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7CF10B04B7F00DF20FB /* PBXTextBookmark */ = 6B8DE7CF10B04B7F00DF20FB /* PBXTextBookmark */; + 6B8DE7D310B04C5000DF20FB /* PBXTextBookmark */ = 6B8DE7D310B04C5000DF20FB /* PBXTextBookmark */; + 6B8DE7D410B04C5000DF20FB /* PBXTextBookmark */ = 6B8DE7D410B04C5000DF20FB /* PBXTextBookmark */; + 6B8DE7D510B04C5000DF20FB /* PBXTextBookmark */ = 6B8DE7D510B04C5000DF20FB /* PBXTextBookmark */; + 6B8DE7D610B04C5000DF20FB /* PBXTextBookmark */ = 6B8DE7D610B04C5000DF20FB /* PBXTextBookmark */; + 6B8DE7D810B04CC900DF20FB /* PBXTextBookmark */ = 6B8DE7D810B04CC900DF20FB /* PBXTextBookmark */; + 6B8DE7DB10B04D2900DF20FB /* PBXTextBookmark */ = 6B8DE7DB10B04D2900DF20FB /* PBXTextBookmark */; + 6B8DE7F110B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F110B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7F210B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F210B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7F310B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F310B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7F410B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F410B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7F510B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F510B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7F610B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F610B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7F710B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F710B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7F810B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F810B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7F910B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7F910B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7FA10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7FA10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7FB10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7FB10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7FC10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7FC10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7FD10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7FD10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7FE10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7FE10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE7FF10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE7FF10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80010B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80010B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80110B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80110B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80210B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80210B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80310B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80310B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80410B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80410B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80510B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80510B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80610B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80610B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80710B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80710B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80810B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80810B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80910B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80910B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80A10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80A10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80B10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80B10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80C10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80C10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80D10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80D10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80E10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80E10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE80F10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE80F10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81010B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81010B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81110B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81110B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81210B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81210B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81310B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81310B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81410B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81410B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81510B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81510B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81610B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81610B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81710B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81710B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81810B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81810B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81910B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81910B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81A10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81A10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81B10B0517A00DF20FB /* PBXTextBookmark */ = 6B8DE81B10B0517A00DF20FB /* PBXTextBookmark */; + 6B8DE81E10B0528100DF20FB /* PBXTextBookmark */ = 6B8DE81E10B0528100DF20FB /* PBXTextBookmark */; + 6B8DE81F10B0528100DF20FB /* PBXTextBookmark */ = 6B8DE81F10B0528100DF20FB /* PBXTextBookmark */; + 6B8DE82010B0528100DF20FB /* PBXTextBookmark */ = 6B8DE82010B0528100DF20FB /* PBXTextBookmark */; + 6B8DE82110B0528100DF20FB /* PBXTextBookmark */ = 6B8DE82110B0528100DF20FB /* PBXTextBookmark */; + 6B8DE82210B0528100DF20FB /* PBXTextBookmark */ = 6B8DE82210B0528100DF20FB /* PBXTextBookmark */; + 6B8DE82310B0528100DF20FB /* PBXTextBookmark */ = 6B8DE82310B0528100DF20FB /* PBXTextBookmark */; + 6B8DE82410B0528100DF20FB /* PBXTextBookmark */ = 6B8DE82410B0528100DF20FB /* PBXTextBookmark */; + 6B8DE82510B0528100DF20FB /* PBXTextBookmark */ = 6B8DE82510B0528100DF20FB /* PBXTextBookmark */; + 6B8DE82710B0529B00DF20FB /* PBXTextBookmark */ = 6B8DE82710B0529B00DF20FB /* PBXTextBookmark */; + 6B8DE82910B052C200DF20FB /* PBXTextBookmark */ = 6B8DE82910B052C200DF20FB /* PBXTextBookmark */; + 6B8DE82B10B052DF00DF20FB /* PBXTextBookmark */ = 6B8DE82B10B052DF00DF20FB /* PBXTextBookmark */; + 6B8DE82D10B0531100DF20FB /* PBXTextBookmark */ = 6B8DE82D10B0531100DF20FB /* PBXTextBookmark */; + 6B8DE82F10B0532B00DF20FB /* PBXTextBookmark */ = 6B8DE82F10B0532B00DF20FB /* PBXTextBookmark */; + 6B8DE83110B0535100DF20FB /* PBXTextBookmark */ = 6B8DE83110B0535100DF20FB /* PBXTextBookmark */; + 6B8DE83310B0539D00DF20FB /* PBXTextBookmark */ = 6B8DE83310B0539D00DF20FB /* PBXTextBookmark */; + 6B8DE83510B053C200DF20FB /* PBXTextBookmark */ = 6B8DE83510B053C200DF20FB /* PBXTextBookmark */; + 6B8DE83710B053F500DF20FB /* PBXTextBookmark */ = 6B8DE83710B053F500DF20FB /* PBXTextBookmark */; + 6B8DE83910B0541B00DF20FB /* PBXTextBookmark */ = 6B8DE83910B0541B00DF20FB /* PBXTextBookmark */; + 6B8DE83B10B0546F00DF20FB /* PBXTextBookmark */ = 6B8DE83B10B0546F00DF20FB /* PBXTextBookmark */; + 6B8DE83D10B054AB00DF20FB /* PBXTextBookmark */ = 6B8DE83D10B054AB00DF20FB /* PBXTextBookmark */; + 6B8DE83F10B054C100DF20FB /* PBXTextBookmark */ = 6B8DE83F10B054C100DF20FB /* PBXTextBookmark */; + 6B8DE84110B054EF00DF20FB /* PBXTextBookmark */ = 6B8DE84110B054EF00DF20FB /* PBXTextBookmark */; + 6B8DE84310B0554900DF20FB /* PBXTextBookmark */ = 6B8DE84310B0554900DF20FB /* PBXTextBookmark */; + 6B8DE84410B0556C00DF20FB /* PBXTextBookmark */ = 6B8DE84410B0556C00DF20FB /* PBXTextBookmark */; + 6B8DE84610B0559F00DF20FB /* PBXTextBookmark */ = 6B8DE84610B0559F00DF20FB /* PBXTextBookmark */; + 6B8DE84710B055DA00DF20FB /* PBXTextBookmark */ = 6B8DE84710B055DA00DF20FB /* PBXTextBookmark */; 6B9BE374107BC6A40036CC81 = 6B9BE374107BC6A40036CC81 /* PBXTextBookmark */; }; sourceControlManager = 6B8632A90F78115100E2684A /* Source Control */; @@ -387,16 +544,16 @@ }; 6B137C7E0F7FCBFE00459200 /* Recast.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 9392}}"; - sepNavSelRange = "{9173, 0}"; - sepNavVisRange = "{8687, 813}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 8816}}"; + sepNavSelRange = "{15866, 0}"; + sepNavVisRange = "{15284, 1210}"; }; }; 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {992, 960}}"; - sepNavSelRange = "{1783, 0}"; - sepNavVisRange = "{1034, 1763}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 1728}}"; + sepNavSelRange = "{1330, 0}"; + sepNavVisRange = "{973, 743}"; }; }; 6B137C800F7FCBFE00459200 /* RecastLog.h */ = { @@ -416,9 +573,9 @@ }; 6B137C820F7FCC1100459200 /* Recast.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 4304}}"; - sepNavSelRange = "{4621, 0}"; - sepNavVisRange = "{4170, 792}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 4512}}"; + sepNavSelRange = "{3239, 0}"; + sepNavVisRange = "{2799, 610}"; }; }; 6B137C830F7FCC1100459200 /* RecastContour.cpp */ = { @@ -430,16 +587,16 @@ }; 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 12624}}"; - sepNavSelRange = "{16758, 0}"; - sepNavVisRange = "{16354, 926}"; + sepNavIntBoundsRect = "{{0, 0}, {922, 14560}}"; + sepNavSelRange = "{8408, 0}"; + sepNavVisRange = "{8355, 697}"; }; }; 6B137C850F7FCC1100459200 /* RecastFilter.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 3840}}"; - sepNavSelRange = "{1546, 1360}"; - sepNavVisRange = "{2109, 1326}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 2080}}"; + sepNavSelRange = "{2388, 0}"; + sepNavVisRange = "{1843, 1001}"; sepNavWindowFrame = "{{15, 78}, {1011, 695}}"; }; }; @@ -480,9 +637,9 @@ }; 6B25B6100FFA62AD004F1BC4 /* Sample.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 848}}"; - sepNavSelRange = "{771, 75}"; - sepNavVisRange = "{264, 851}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 1056}}"; + sepNavSelRange = "{141, 0}"; + sepNavVisRange = "{0, 588}"; }; }; 6B25B6110FFA62AD004F1BC4 /* Sample_StatMesh.h */ = { @@ -501,23 +658,23 @@ }; 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 2352}}"; - sepNavSelRange = "{700, 0}"; - sepNavVisRange = "{336, 748}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 3120}}"; + sepNavSelRange = "{1280, 20}"; + sepNavVisRange = "{1158, 618}"; }; }; 6B25B6150FFA62BE004F1BC4 /* Sample_StatMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 5632}}"; - sepNavSelRange = "{450, 1}"; - sepNavVisRange = "{0, 709}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 5120}}"; + sepNavSelRange = "{8415, 0}"; + sepNavVisRange = "{7879, 892}"; }; }; 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {1111, 10080}}"; - sepNavSelRange = "{14762, 840}"; - sepNavVisRange = "{15202, 999}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 9376}}"; + sepNavSelRange = "{4650, 19}"; + sepNavVisRange = "{4371, 538}"; }; }; 6B25B6180FFA62BE004F1BC4 /* main.cpp */ = { @@ -537,16 +694,16 @@ }; 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 14304}}"; - sepNavSelRange = "{23199, 0}"; - sepNavVisRange = "{0, 1325}"; + sepNavIntBoundsRect = "{{0, 0}, {1223, 14672}}"; + sepNavSelRange = "{6334, 0}"; + sepNavVisRange = "{6103, 762}"; }; }; 6B2AEC550FFB89E7005BE9CC /* Sample_StatMeshTiled.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {950, 15504}}"; - sepNavSelRange = "{20748, 0}"; - sepNavVisRange = "{20325, 1228}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 16544}}"; + sepNavSelRange = "{10674, 0}"; + sepNavVisRange = "{10487, 695}"; }; }; 6B2AEC570FFB89F4005BE9CC /* Sample_StatMeshTiled.h */ = { @@ -625,7 +782,7 @@ fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; name = "Sample_StatMeshSimple.cpp: 506"; rLen = 0; - rLoc = 15330; + rLoc = 15428; rType = 0; vrLen = 969; vrLoc = 13733; @@ -648,16 +805,16 @@ }; 6B555DAE100B211D00247EA3 /* imguiRenderGL.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 520}}"; - sepNavSelRange = "{1101, 0}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 424}}"; + sepNavSelRange = "{917, 0}"; sepNavVisRange = "{0, 1101}"; }; }; 6B555DB0100B212E00247EA3 /* imguiRenderGL.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 6400}}"; - sepNavSelRange = "{440, 0}"; - sepNavVisRange = "{0, 1158}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 6336}}"; + sepNavSelRange = "{1537, 0}"; + sepNavVisRange = "{1131, 871}"; }; }; 6B555DF6100B273500247EA3 /* stb_truetype.h */ = { @@ -866,7 +1023,7 @@ fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; name = "Sample_StatMeshSimple.cpp: 222"; rLen = 0; - rLoc = 6674; + rLoc = 6752; rType = 0; vrLen = 822; vrLoc = 6148; @@ -886,7 +1043,7 @@ fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; name = "Sample_StatMeshSimple.cpp: 222"; rLen = 0; - rLoc = 6674; + rLoc = 6752; rType = 0; vrLen = 822; vrLoc = 6148; @@ -906,7 +1063,7 @@ fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; name = "RecastDebugDraw.cpp: 715"; rLen = 0; - rLoc = 16758; + rLoc = 1309; rType = 0; vrLen = 926; vrLoc = 16354; @@ -926,7 +1083,7 @@ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; name = "Recast.h: 435"; rLen = 0; - rLoc = 14949; + rLoc = 14945; rType = 0; vrLen = 1449; vrLoc = 13898; @@ -976,7 +1133,7 @@ fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; name = "RecastDebugDraw.cpp: 715"; rLen = 0; - rLoc = 16758; + rLoc = 1309; rType = 0; vrLen = 926; vrLoc = 16354; @@ -986,7 +1143,7 @@ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; name = "Recast.h: 435"; rLen = 20; - rLoc = 14874; + rLoc = 14870; rType = 0; vrLen = 1436; vrLoc = 13909; @@ -1016,7 +1173,7 @@ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; name = "Recast.h: 435"; rLen = 0; - rLoc = 14949; + rLoc = 14945; rType = 0; vrLen = 1449; vrLoc = 13898; @@ -1125,7 +1282,7 @@ fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; name = "Sample_StatMeshSimple.cpp: 491"; rLen = 840; - rLoc = 14762; + rLoc = 14860; rType = 0; vrLen = 999; vrLoc = 15202; @@ -1200,7 +1357,7 @@ isa = PBXTextBookmark; fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; name = "RecastFilter.cpp: 48"; - rLen = 1360; + rLen = 1328; rLoc = 1546; rType = 0; vrLen = 1326; @@ -1241,7 +1398,7 @@ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; name = "Recast.h: 247"; rLen = 0; - rLoc = 9173; + rLoc = 9169; rType = 0; vrLen = 813; vrLoc = 8687; @@ -1314,7 +1471,7 @@ fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; name = "Sample_StatMeshSimple.cpp: 491"; rLen = 840; - rLoc = 14762; + rLoc = 14860; rType = 0; vrLen = 999; vrLoc = 15202; @@ -1609,7 +1766,7 @@ isa = PBXTextBookmark; fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; name = "RecastFilter.cpp: 48"; - rLen = 1360; + rLen = 1328; rLoc = 1546; rType = 0; vrLen = 1326; @@ -1670,7 +1827,7 @@ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; name = "Recast.h: 246"; rLen = 0; - rLoc = 9132; + rLoc = 9128; rType = 0; vrLen = 493; vrLoc = 9064; @@ -1690,7 +1847,7 @@ fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; name = "Recast.h: 247"; rLen = 0; - rLoc = 9173; + rLoc = 9169; rType = 0; vrLen = 813; vrLoc = 8687; @@ -1741,6 +1898,1565 @@ vrLen = 792; vrLoc = 4170; }; + 6B8DE74B10B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; + name = "Recast.cpp: 165"; + rLen = 0; + rLoc = 4412; + rType = 0; + vrLen = 792; + vrLoc = 4170; + }; + 6B8DE74C10B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; + name = "Sample_StatMeshSimple.cpp: 372"; + rLen = 0; + rLoc = 11664; + rType = 0; + vrLen = 1425; + vrLoc = 10795; + }; + 6B8DE74D10B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 132"; + rLen = 0; + rLoc = 4139; + rType = 0; + vrLen = 802; + vrLoc = 3346; + }; + 6B8DE74E10B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + rLen = 0; + rLoc = 15866; + rType = 0; + }; + 6B8DE74F10B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; + name = "Recast.cpp: 165"; + rLen = 0; + rLoc = 4412; + rType = 0; + vrLen = 792; + vrLoc = 4170; + }; + 6B8DE75010B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 243"; + rLen = 0; + rLoc = 9059; + rType = 0; + vrLen = 1221; + vrLoc = 8775; + }; + 6B8DE75110B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 48"; + rLen = 1328; + rLoc = 1546; + rType = 0; + vrLen = 995; + vrLoc = 1025; + }; + 6B8DE75210B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; + name = "Sample_StatMeshSimple.cpp: 372"; + rLen = 0; + rLoc = 11664; + rType = 0; + vrLen = 1425; + vrLoc = 10795; + }; + 6B8DE75310B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 234"; + rLen = 8; + rLoc = 8666; + rType = 0; + vrLen = 701; + vrLoc = 7990; + }; + 6B8DE75410B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 154"; + rLen = 0; + rLoc = 4139; + rType = 0; + vrLen = 589; + vrLoc = 4848; + }; + 6B8DE75510B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 54"; + rLen = 0; + rLoc = 2447; + rType = 0; + vrLen = 805; + vrLoc = 1982; + }; + 6B8DE75610B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 132"; + rLen = 0; + rLoc = 4139; + rType = 0; + vrLen = 802; + vrLoc = 3346; + }; + 6B8DE75710B01EEA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 234"; + rLen = 0; + rLoc = 8677; + rType = 0; + vrLen = 879; + vrLoc = 8136; + }; + 6B8DE75810B01F1A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 234"; + rLen = 8; + rLoc = 8666; + rType = 0; + vrLen = 879; + vrLoc = 8136; + }; + 6B8DE75910B01F1A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 132"; + rLen = 0; + rLoc = 4139; + rType = 0; + vrLen = 804; + vrLoc = 3344; + }; + 6B8DE75A10B01F1A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 234"; + rLen = 8; + rLoc = 8666; + rType = 0; + vrLen = 879; + vrLoc = 8136; + }; + 6B8DE75B10B01F1A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 83"; + rLen = 0; + rLoc = 2726; + rType = 0; + vrLen = 898; + vrLoc = 2389; + }; + 6B8DE75D10B01F9900DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 80"; + rLen = 0; + rLoc = 2681; + rType = 0; + vrLen = 964; + vrLoc = 1763; + }; + 6B8DE75E10B01F9900DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 715"; + rLen = 0; + rLoc = 1309; + rType = 0; + vrLen = 806; + vrLoc = 16422; + }; + 6B8DE75F10B01F9900DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 80"; + rLen = 0; + rLoc = 2681; + rType = 0; + vrLen = 964; + vrLoc = 1763; + }; + 6B8DE76010B01F9900DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 255"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 615; + vrLoc = 6338; + }; + 6B8DE76410B022B200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 252"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 615; + vrLoc = 6338; + }; + 6B8DE76510B022B200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; + name = "Recast.cpp: 167"; + rLen = 0; + rLoc = 4432; + rType = 0; + vrLen = 840; + vrLoc = 3938; + }; + 6B8DE76610B022B200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 80"; + rLen = 0; + rLoc = 2681; + rType = 0; + vrLen = 964; + vrLoc = 1763; + }; + 6B8DE76710B022B200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 252"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 615; + vrLoc = 6338; + }; + 6B8DE76810B022B200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C820F7FCC1100459200 /* Recast.cpp */; + name = "Recast.cpp: 167"; + rLen = 0; + rLoc = 4432; + rType = 0; + vrLen = 840; + vrLoc = 3938; + }; + 6B8DE76910B022B200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 52"; + rLen = 0; + rLoc = 1717; + rType = 0; + vrLen = 786; + vrLoc = 1355; + }; + 6B8DE76D10B0243500DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 73"; + rLen = 0; + rLoc = 2388; + rType = 0; + vrLen = 1001; + vrLoc = 1843; + }; + 6B8DE76E10B0243500DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 468"; + rLen = 0; + rLoc = 15866; + rType = 0; + vrLen = 1210; + vrLoc = 15284; + }; + 6B8DE76F10B0243500DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 252"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 577; + vrLoc = 6338; + }; + 6B8DE77010B0243500DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C850F7FCC1100459200 /* RecastFilter.cpp */; + name = "RecastFilter.cpp: 73"; + rLen = 0; + rLoc = 2388; + rType = 0; + vrLen = 1001; + vrLoc = 1843; + }; + 6B8DE77110B0243500DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7E0F7FCBFE00459200 /* Recast.h */; + name = "Recast.h: 468"; + rLen = 0; + rLoc = 15866; + rType = 0; + vrLen = 1210; + vrLoc = 15284; + }; + 6B8DE77210B0243500DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 229"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 587; + vrLoc = 5930; + }; + 6B8DE77410B0244F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 229"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 586; + vrLoc = 5930; + }; + 6B8DE77610B0247200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 229"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 589; + vrLoc = 5930; + }; + 6B8DE77810B024C000DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 229"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 602; + vrLoc = 5930; + }; + 6B8DE77A10B024F800DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 230"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 618; + vrLoc = 5930; + }; + 6B8DE77C10B0251A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 228"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 617; + vrLoc = 5930; + }; + 6B8DE77E10B0252100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 228"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 617; + vrLoc = 5930; + }; + 6B8DE78010B0254B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 228"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 617; + vrLoc = 5930; + }; + 6B8DE78210B0255500DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 230"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 617; + vrLoc = 5930; + }; + 6B8DE78410B0258200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 228"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 617; + vrLoc = 5930; + }; + 6B8DE78610B0259B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 230"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 617; + vrLoc = 5930; + }; + 6B8DE78810B0306200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 228"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 667; + vrLoc = 5932; + }; + 6B8DE78A10B0308600DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 228"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 671; + vrLoc = 5932; + }; + 6B8DE78C10B030A600DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 230"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 676; + vrLoc = 5932; + }; + 6B8DE78E10B030EE00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 229"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 684; + vrLoc = 5932; + }; + 6B8DE79610B0348000DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 39"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 501; + vrLoc = 919; + }; + 6B8DE79710B0348000DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 63"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 699; + vrLoc = 1917; + }; + 6B8DE79A10B034C600DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 118"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 712; + vrLoc = 2616; + }; + 6B8DE79B10B0374C00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 269"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 747; + vrLoc = 6711; + }; + 6B8DE79C10B037C700DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 287"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 540; + vrLoc = 7229; + }; + 6B8DE79D10B037C700DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 304"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 643; + vrLoc = 7630; + }; + 6B8DE79E10B0404100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 36"; + rLen = 0; + rLoc = 2306; + rType = 0; + vrLen = 1638; + vrLoc = 1160; + }; + 6B8DE79F10B0404100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 426"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 626; + vrLoc = 10347; + }; + 6B8DE7A010B0404100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 426"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 626; + vrLoc = 10347; + }; + 6B8DE7A110B0404100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 36"; + rLen = 0; + rLoc = 2306; + rType = 0; + vrLen = 1638; + vrLoc = 1160; + }; + 6B8DE7A210B0404100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 545"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 706; + vrLoc = 13154; + }; + 6B8DE7A310B0412B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 57"; + rLen = 35; + rLoc = 4065; + rType = 0; + vrLen = 1615; + vrLoc = 1200; + }; + 6B8DE7A410B0412B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 553"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 669; + vrLoc = 13320; + }; + 6B8DE7A510B0412B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 422"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 629; + vrLoc = 10440; + }; + 6B8DE7A610B0412B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 57"; + rLen = 35; + rLoc = 4065; + rType = 0; + vrLen = 1615; + vrLoc = 1200; + }; + 6B8DE7A710B0412B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 553"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 669; + vrLoc = 13320; + }; + 6B8DE7A810B0412B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 57"; + rLen = 35; + rLoc = 4065; + rType = 0; + vrLen = 1615; + vrLoc = 1200; + }; + 6B8DE7A910B0412B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 573"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 673; + vrLoc = 13983; + }; + 6B8DE7AA10B0463F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 27"; + rLen = 0; + rLoc = 2072; + rType = 0; + vrLen = 1057; + vrLoc = 202; + }; + 6B8DE7AB10B0463F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + rLen = 0; + rLoc = 1143; + rType = 0; + }; + 6B8DE7AC10B0463F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 615"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 501; + vrLoc = 14995; + }; + 6B8DE7AD10B0463F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 27"; + rLen = 0; + rLoc = 2072; + rType = 0; + vrLen = 1057; + vrLoc = 202; + }; + 6B8DE7AE10B0463F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 827"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 663; + vrLoc = 19649; + }; + 6B8DE7AF10B0479B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 893"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 661; + vrLoc = 22351; + }; + 6B8DE7C510B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 819"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 688; + vrLoc = 19922; + }; + 6B8DE7C610B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6150FFA62BE004F1BC4 /* Sample_StatMesh.cpp */; + name = "Sample_StatMesh.cpp: 292"; + rLen = 0; + rLoc = 7372; + rType = 0; + vrLen = 795; + vrLoc = 6877; + }; + 6B8DE7C710B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 57"; + rLen = 102; + rLoc = 4001; + rType = 0; + vrLen = 1633; + vrLoc = 1199; + }; + 6B8DE7C810B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + comments = "error: at this point in file"; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + rLen = 1; + rLoc = 415; + rType = 1; + }; + 6B8DE7C910B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 562"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 678; + vrLoc = 13436; + }; + 6B8DE7CA10B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 57"; + rLen = 0; + rLoc = 4001; + rType = 0; + vrLen = 1603; + vrLoc = 1229; + }; + 6B8DE7CB10B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 819"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 688; + vrLoc = 19922; + }; + 6B8DE7CC10B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 57"; + rLen = 102; + rLoc = 4001; + rType = 0; + vrLen = 1633; + vrLoc = 1199; + }; + 6B8DE7CD10B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6150FFA62BE004F1BC4 /* Sample_StatMesh.cpp */; + name = "Sample_StatMesh.cpp: 292"; + rLen = 0; + rLoc = 7372; + rType = 0; + vrLen = 795; + vrLoc = 6877; + }; + 6B8DE7CE10B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 57"; + rLen = 102; + rLoc = 4001; + rType = 0; + vrLen = 1633; + vrLoc = 1199; + }; + 6B8DE7CF10B04B7F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 417"; + rLen = 0; + rLoc = 11078; + rType = 0; + vrLen = 825; + vrLoc = 10515; + }; + 6B8DE7D310B04C5000DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 609"; + rLen = 7; + rLoc = 15904; + rType = 0; + vrLen = 1297; + vrLoc = 15422; + }; + 6B8DE7D410B04C5000DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + rLen = 0; + rLoc = 28; + rType = 1; + }; + 6B8DE7D510B04C5000DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 609"; + rLen = 7; + rLoc = 15904; + rType = 0; + vrLen = 1297; + vrLoc = 15422; + }; + 6B8DE7D610B04C5000DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 103"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 422; + vrLoc = 2273; + }; + 6B8DE7D810B04CC900DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 725"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 644; + vrLoc = 17278; + }; + 6B8DE7DB10B04D2900DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 754"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 580; + vrLoc = 18316; + }; + 6B8DE7F110B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B555DAE100B211D00247EA3 /* imguiRenderGL.h */; + name = "imguiRenderGL.h: 17"; + rLen = 0; + rLoc = 917; + rType = 0; + vrLen = 1101; + vrLoc = 0; + }; + 6B8DE7F210B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 29"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 661; + vrLoc = 915; + }; + 6B8DE7F310B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 8"; + rLen = 0; + rLoc = 141; + rType = 0; + vrLen = 588; + vrLoc = 0; + }; + 6B8DE7F410B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 84"; + rLen = 20; + rLoc = 1280; + rType = 0; + vrLen = 618; + vrLoc = 1158; + }; + 6B8DE7F510B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6150FFA62BE004F1BC4 /* Sample_StatMesh.cpp */; + name = "Sample_StatMesh.cpp: 329"; + rLen = 0; + rLoc = 8415; + rType = 0; + vrLen = 892; + vrLoc = 7879; + }; + 6B8DE7F610B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 256"; + rLen = 0; + rLoc = 6334; + rType = 0; + vrLen = 762; + vrLoc = 6103; + }; + 6B8DE7F710B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; + name = "Sample_StatMeshSimple.cpp: 148"; + rLen = 19; + rLoc = 4650; + rType = 0; + vrLen = 538; + vrLoc = 4371; + }; + 6B8DE7F810B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC550FFB89E7005BE9CC /* Sample_StatMeshTiled.cpp */; + name = "Sample_StatMeshTiled.cpp: 384"; + rLen = 0; + rLoc = 10674; + rType = 0; + vrLen = 695; + vrLoc = 10487; + }; + 6B8DE7F910B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 32"; + rLen = 0; + rLoc = 1115; + rType = 0; + vrLen = 695; + vrLoc = 919; + }; + 6B8DE7FA10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 104"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 563; + vrLoc = 2227; + }; + 6B8DE7FB10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 68"; + rLen = 0; + rLoc = 4103; + rType = 0; + vrLen = 1999; + vrLoc = 1398; + }; + 6B8DE7FC10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 39"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 581; + vrLoc = 1141; + }; + 6B8DE7FD10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 29"; + rLen = 0; + rLoc = 1360; + rType = 0; + vrLen = 950; + vrLoc = 837; + }; + 6B8DE7FE10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 39"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 439; + vrLoc = 1080; + }; + 6B8DE7FF10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 23"; + rLen = 0; + rLoc = 1092; + rType = 0; + vrLen = 843; + vrLoc = 837; + }; + 6B8DE80010B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 27"; + rLen = 0; + rLoc = 1040; + rType = 0; + vrLen = 585; + vrLoc = 784; + }; + 6B8DE80110B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 30"; + rLen = 0; + rLoc = 1072; + rType = 0; + vrLen = 660; + vrLoc = 837; + }; + 6B8DE80210B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 29"; + rLen = 0; + rLoc = 1085; + rType = 0; + vrLen = 585; + vrLoc = 784; + }; + 6B8DE80310B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 75"; + rLen = 0; + rLoc = 2307; + rType = 0; + vrLen = 1658; + vrLoc = 2042; + }; + 6B8DE80410B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 959"; + rLen = 1; + rLoc = 22916; + rType = 0; + vrLen = 586; + vrLoc = 23526; + }; + 6B8DE80510B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 32"; + rLen = 0; + rLoc = 1115; + rType = 0; + vrLen = 695; + vrLoc = 919; + }; + 6B8DE80610B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 33"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 568; + vrLoc = 1769; + }; + 6B8DE80710B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B555DAE100B211D00247EA3 /* imguiRenderGL.h */; + name = "imguiRenderGL.h: 17"; + rLen = 0; + rLoc = 917; + rType = 0; + vrLen = 1101; + vrLoc = 0; + }; + 6B8DE80810B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 6"; + rLen = 293; + rLoc = 77; + rType = 0; + vrLen = 459; + vrLoc = 799; + }; + 6B8DE80910B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 5"; + rLen = 0; + rLoc = 102; + rType = 0; + vrLen = 498; + vrLoc = 0; + }; + 6B8DE80A10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 22"; + rLen = 0; + rLoc = 992; + rType = 0; + vrLen = 1128; + vrLoc = 0; + }; + 6B8DE80B10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 20"; + rLen = 0; + rLoc = 361; + rType = 0; + vrLen = 497; + vrLoc = 412; + }; + 6B8DE80C10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 9"; + rLen = 0; + rLoc = 258; + rType = 0; + vrLen = 630; + vrLoc = 76; + }; + 6B8DE80D10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 16"; + rLen = 0; + rLoc = 243; + rType = 0; + vrLen = 455; + vrLoc = 151; + }; + 6B8DE80E10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 9"; + rLen = 0; + rLoc = 258; + rType = 0; + vrLen = 604; + vrLoc = 76; + }; + 6B8DE80F10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 29"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 661; + vrLoc = 915; + }; + 6B8DE81010B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 32"; + rLen = 0; + rLoc = 1115; + rType = 0; + vrLen = 695; + vrLoc = 919; + }; + 6B8DE81110B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 8"; + rLen = 0; + rLoc = 141; + rType = 0; + vrLen = 606; + vrLoc = 76; + }; + 6B8DE81210B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 86"; + rLen = 0; + rLoc = 1313; + rType = 0; + vrLen = 474; + vrLoc = 1129; + }; + 6B8DE81310B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6100FFA62AD004F1BC4 /* Sample.h */; + name = "Sample.h: 8"; + rLen = 0; + rLoc = 141; + rType = 0; + vrLen = 588; + vrLoc = 0; + }; + 6B8DE81410B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6140FFA62BE004F1BC4 /* Sample.cpp */; + name = "Sample.cpp: 84"; + rLen = 20; + rLoc = 1280; + rType = 0; + vrLen = 618; + vrLoc = 1158; + }; + 6B8DE81510B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6150FFA62BE004F1BC4 /* Sample_StatMesh.cpp */; + name = "Sample_StatMesh.cpp: 329"; + rLen = 0; + rLoc = 8415; + rType = 0; + vrLen = 892; + vrLoc = 7879; + }; + 6B8DE81610B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; + name = "Sample_StatMeshSimple.cpp: 250"; + rLen = 1; + rLoc = 7465; + rType = 0; + vrLen = 768; + vrLoc = 6933; + }; + 6B8DE81710B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC520FFB8958005BE9CC /* Sample_TileMesh.cpp */; + name = "Sample_TileMesh.cpp: 256"; + rLen = 0; + rLoc = 6334; + rType = 0; + vrLen = 762; + vrLoc = 6103; + }; + 6B8DE81810B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC550FFB89E7005BE9CC /* Sample_StatMeshTiled.cpp */; + name = "Sample_StatMeshTiled.cpp: 174"; + rLen = 0; + rLoc = 5615; + rType = 0; + vrLen = 542; + vrLoc = 5492; + }; + 6B8DE81910B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B25B6160FFA62BE004F1BC4 /* Sample_StatMeshSimple.cpp */; + name = "Sample_StatMeshSimple.cpp: 148"; + rLen = 19; + rLoc = 4650; + rType = 0; + vrLen = 538; + vrLoc = 4371; + }; + 6B8DE81A10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B2AEC550FFB89E7005BE9CC /* Sample_StatMeshTiled.cpp */; + name = "Sample_StatMeshTiled.cpp: 384"; + rLen = 0; + rLoc = 10674; + rType = 0; + vrLen = 695; + vrLoc = 10487; + }; + 6B8DE81B10B0517A00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 34"; + rLen = 0; + rLoc = 1330; + rType = 0; + vrLen = 696; + vrLoc = 973; + }; + 6B8DE81E10B0528100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 34"; + rLen = 0; + rLoc = 1330; + rType = 0; + vrLen = 743; + vrLoc = 973; + }; + 6B8DE81F10B0528100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E040F91112200904EEF /* DetourDebugDraw.h */; + name = "DetourDebugDraw.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1279; + vrLoc = 0; + }; + 6B8DE82010B0528100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 330"; + rLen = 28; + rLoc = 8312; + rType = 0; + vrLen = 566; + vrLoc = 8078; + }; + 6B8DE82110B0528100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 29"; + rLen = 0; + rLoc = 1143; + rType = 0; + vrLen = 661; + vrLoc = 915; + }; + 6B8DE82210B0528100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C7F0F7FCBFE00459200 /* RecastDebugDraw.h */; + name = "RecastDebugDraw.h: 34"; + rLen = 0; + rLoc = 1330; + rType = 0; + vrLen = 743; + vrLoc = 973; + }; + 6B8DE82310B0528100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E040F91112200904EEF /* DetourDebugDraw.h */; + name = "DetourDebugDraw.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 1279; + vrLoc = 0; + }; + 6B8DE82410B0528100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */; + name = "DetourDebugDraw.cpp: 330"; + rLen = 28; + rLoc = 8312; + rType = 0; + vrLen = 566; + vrLoc = 8078; + }; + 6B8DE82510B0528100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 272"; + rLen = 0; + rLoc = 7487; + rType = 0; + vrLen = 568; + vrLoc = 7100; + }; + 6B8DE82710B0529B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 272"; + rLen = 0; + rLoc = 7494; + rType = 0; + vrLen = 675; + vrLoc = 7100; + }; + 6B8DE82910B052C200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 272"; + rLen = 0; + rLoc = 7494; + rType = 0; + vrLen = 675; + vrLoc = 7100; + }; + 6B8DE82B10B052DF00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 272"; + rLen = 0; + rLoc = 7494; + rType = 0; + vrLen = 675; + vrLoc = 7100; + }; + 6B8DE82D10B0531100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 272"; + rLen = 0; + rLoc = 7496; + rType = 0; + vrLen = 674; + vrLoc = 7100; + }; + 6B8DE82F10B0532B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 272"; + rLen = 0; + rLoc = 7487; + rType = 0; + vrLen = 676; + vrLoc = 7100; + }; + 6B8DE83110B0535100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 272"; + rLen = 0; + rLoc = 7496; + rType = 0; + vrLen = 676; + vrLoc = 7100; + }; + 6B8DE83310B0539D00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 271"; + rLen = 0; + rLoc = 7417; + rType = 0; + vrLen = 662; + vrLoc = 7242; + }; + 6B8DE83510B053C200DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 273"; + rLen = 0; + rLoc = 7548; + rType = 0; + vrLen = 667; + vrLoc = 7242; + }; + 6B8DE83710B053F500DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 271"; + rLen = 0; + rLoc = 7417; + rType = 0; + vrLen = 667; + vrLoc = 7242; + }; + 6B8DE83910B0541B00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 271"; + rLen = 0; + rLoc = 7431; + rType = 0; + vrLen = 668; + vrLoc = 7242; + }; + 6B8DE83B10B0546F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 310"; + rLen = 0; + rLoc = 8408; + rType = 0; + vrLen = 636; + vrLoc = 8232; + }; + 6B8DE83D10B054AB00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 267"; + rLen = 0; + rLoc = 7479; + rType = 0; + vrLen = 620; + vrLoc = 7198; + }; + 6B8DE83F10B054C100DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 267"; + rLen = 0; + rLoc = 7495; + rType = 0; + vrLen = 620; + vrLoc = 7198; + }; + 6B8DE84110B054EF00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 265"; + rLen = 0; + rLoc = 7357; + rType = 0; + vrLen = 623; + vrLoc = 7198; + }; + 6B8DE84310B0554900DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 310"; + rLen = 0; + rLoc = 8408; + rType = 0; + vrLen = 768; + vrLoc = 8263; + }; + 6B8DE84410B0556C00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 268"; + rLen = 0; + rLoc = 7562; + rType = 0; + vrLen = 622; + vrLoc = 7198; + }; + 6B8DE84610B0559F00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 311"; + rLen = 0; + rLoc = 8447; + rType = 0; + vrLen = 728; + vrLoc = 8355; + }; + 6B8DE84710B055DA00DF20FB /* PBXTextBookmark */ = { + isa = PBXTextBookmark; + fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; + name = "RecastDebugDraw.cpp: 310"; + rLen = 0; + rLoc = 8408; + rType = 0; + vrLen = 697; + vrLoc = 8355; + }; 6B9301521032F08300F0C0DA /* Recast.cpp:280 */ = { isa = PBXFileBreakpoint; actions = ( @@ -1779,7 +3495,7 @@ fRef = 6B137C840F7FCC1100459200 /* RecastDebugDraw.cpp */; name = "RecastDebugDraw.cpp: 714"; rLen = 0; - rLoc = 16736; + rLoc = 1309; rType = 0; vrLen = 1030; vrLoc = 16250; @@ -1808,7 +3524,7 @@ modificationTime = 277989520.846603; state = 1; }; - 6B9D09921028542A009B1A6C /* RecastDebugDraw.cpp:698 */ = { + 6B9D09921028542A009B1A6C /* RecastDebugDraw.cpp:29 */ = { isa = PBXFileBreakpoint; actions = ( ); @@ -1820,7 +3536,7 @@ functionName = "rcDebugDrawTextureSet(const rcTextureSet& tset)"; hitCount = 0; ignoreCount = 0; - lineNumber = 698; + lineNumber = 29; location = Recast; modificationTime = 277989520.847037; state = 2; @@ -1841,9 +3557,9 @@ }; 6BDD9E040F91112200904EEF /* DetourDebugDraw.h */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 520}}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 512}}"; sepNavSelRange = "{0, 0}"; - sepNavVisRange = "{0, 1465}"; + sepNavVisRange = "{0, 1279}"; }; }; 6BDD9E050F91112200904EEF /* DetourStatNavMesh.h */ = { @@ -1862,9 +3578,9 @@ }; 6BDD9E070F91113800904EEF /* DetourDebugDraw.cpp */ = { uiCtxt = { - sepNavIntBoundsRect = "{{0, 0}, {915, 7600}}"; - sepNavSelRange = "{12646, 0}"; - sepNavVisRange = "{11948, 901}"; + sepNavIntBoundsRect = "{{0, 0}, {915, 7648}}"; + sepNavSelRange = "{8312, 28}"; + sepNavVisRange = "{8078, 566}"; }; }; 6BDD9E080F91113800904EEF /* DetourStatNavMesh.cpp */ = { diff --git a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 index a602c7f..d6b480e 100644 --- a/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 +++ b/RecastDemo/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 @@ -279,14 +279,14 @@ PBXSmartGroupTreeModuleOutlineStateSelectionKey - 28 + 21 18 1 0 PBXSmartGroupTreeModuleOutlineStateVisibleRectKey - {{0, 125}, {282, 660}} + {{0, 49}, {282, 660}} PBXTopSmartGroupGIDs @@ -321,7 +321,7 @@ PBXProjectModuleGUID 6B8632A30F78115100E2684A PBXProjectModuleLabel - Recast.cpp + RecastDebugDraw.cpp PBXSplitModuleInNavigatorKey Split0 @@ -329,37 +329,44 @@ PBXProjectModuleGUID 6B8632A40F78115100E2684A PBXProjectModuleLabel - Recast.cpp + RecastDebugDraw.cpp _historyCapacity 0 bookmark - 6B8DE74910B01BE900DF20FB + 6B8DE84710B055DA00DF20FB history - 6B6FA3B61076452F009B0572 6B3BFADD107A80E1006284CD 6B3BFB0C107A8979006284CD 6B3BFB0D107A8979006284CD 6B57D358108C66B200DDD053 6B57D38F108C69E400DDD053 - 6B7FB74A1091EBDE001BA51A 6B7FB74D1091EBDE001BA51A 6B8DE6FE10B01BBF00DF20FB 6B8DE6FF10B01BBF00DF20FB - 6B8DE70010B01BBF00DF20FB 6B8DE70110B01BBF00DF20FB 6B8DE70310B01BBF00DF20FB 6B8DE70410B01BBF00DF20FB 6B8DE70510B01BBF00DF20FB 6B8DE70610B01BBF00DF20FB 6B8DE70710B01BBF00DF20FB - 6B8DE70810B01BBF00DF20FB 6B8DE70910B01BBF00DF20FB 6B8DE70A10B01BBF00DF20FB 6B8DE70B10B01BBF00DF20FB - 6B8DE70C10B01BBF00DF20FB 6B8DE70D10B01BBF00DF20FB - 6B8DE73D10B01BBF00DF20FB + 6B8DE76D10B0243500DF20FB + 6B8DE76E10B0243500DF20FB + 6B8DE7F110B0517A00DF20FB + 6B8DE7F310B0517A00DF20FB + 6B8DE7F410B0517A00DF20FB + 6B8DE7F510B0517A00DF20FB + 6B8DE7F610B0517A00DF20FB + 6B8DE7F710B0517A00DF20FB + 6B8DE7F810B0517A00DF20FB + 6B8DE81E10B0528100DF20FB + 6B8DE81F10B0528100DF20FB + 6B8DE82010B0528100DF20FB + 6B8DE82110B0528100DF20FB prevStack @@ -367,7 +374,6 @@ 6B6FA36B1070C1F7009B0572 6B6FA3B81076452F009B0572 6B6FA3BA1076452F009B0572 - 6B6FA3BC1076452F009B0572 6B3BFADF107A80E1006284CD 6B3BFB12107A8979006284CD 6B3BFB13107A8979006284CD @@ -375,7 +381,6 @@ 6B57D35B108C66B200DDD053 6B57D376108C692900DDD053 6B57D393108C69E400DDD053 - 6B7FB7531091EBDE001BA51A 6B7FB7541091EBDE001BA51A 6B7FB7571091EBDE001BA51A 6B8DE71110B01BBF00DF20FB @@ -406,17 +411,76 @@ 6B8DE72E10B01BBF00DF20FB 6B8DE72F10B01BBF00DF20FB 6B8DE73010B01BBF00DF20FB - 6B8DE73110B01BBF00DF20FB 6B8DE73210B01BBF00DF20FB - 6B8DE73310B01BBF00DF20FB 6B8DE73410B01BBF00DF20FB - 6B8DE73510B01BBF00DF20FB 6B8DE73610B01BBF00DF20FB 6B8DE73710B01BBF00DF20FB 6B8DE73810B01BBF00DF20FB - 6B8DE73910B01BBF00DF20FB 6B8DE73A10B01BBF00DF20FB 6B8DE73B10B01BBF00DF20FB + 6B8DE75010B01EEA00DF20FB + 6B8DE75110B01EEA00DF20FB + 6B8DE75210B01EEA00DF20FB + 6B8DE75310B01EEA00DF20FB + 6B8DE75410B01EEA00DF20FB + 6B8DE75510B01EEA00DF20FB + 6B8DE75610B01EEA00DF20FB + 6B8DE75A10B01F1A00DF20FB + 6B8DE75F10B01F9900DF20FB + 6B8DE76710B022B200DF20FB + 6B8DE77010B0243500DF20FB + 6B8DE77110B0243500DF20FB + 6B8DE7A010B0404100DF20FB + 6B8DE7A110B0404100DF20FB + 6B8DE7A510B0412B00DF20FB + 6B8DE7A610B0412B00DF20FB + 6B8DE7A710B0412B00DF20FB + 6B8DE7A810B0412B00DF20FB + 6B8DE7AC10B0463F00DF20FB + 6B8DE7AD10B0463F00DF20FB + 6B8DE7C910B04B7F00DF20FB + 6B8DE7CA10B04B7F00DF20FB + 6B8DE7CB10B04B7F00DF20FB + 6B8DE7CC10B04B7F00DF20FB + 6B8DE7CD10B04B7F00DF20FB + 6B8DE7CE10B04B7F00DF20FB + 6B8DE7D510B04C5000DF20FB + 6B8DE7FA10B0517A00DF20FB + 6B8DE7FB10B0517A00DF20FB + 6B8DE7FC10B0517A00DF20FB + 6B8DE7FD10B0517A00DF20FB + 6B8DE7FE10B0517A00DF20FB + 6B8DE7FF10B0517A00DF20FB + 6B8DE80010B0517A00DF20FB + 6B8DE80110B0517A00DF20FB + 6B8DE80210B0517A00DF20FB + 6B8DE80310B0517A00DF20FB + 6B8DE80410B0517A00DF20FB + 6B8DE80510B0517A00DF20FB + 6B8DE80610B0517A00DF20FB + 6B8DE80710B0517A00DF20FB + 6B8DE80810B0517A00DF20FB + 6B8DE80910B0517A00DF20FB + 6B8DE80A10B0517A00DF20FB + 6B8DE80B10B0517A00DF20FB + 6B8DE80C10B0517A00DF20FB + 6B8DE80D10B0517A00DF20FB + 6B8DE80E10B0517A00DF20FB + 6B8DE80F10B0517A00DF20FB + 6B8DE81010B0517A00DF20FB + 6B8DE81110B0517A00DF20FB + 6B8DE81210B0517A00DF20FB + 6B8DE81310B0517A00DF20FB + 6B8DE81410B0517A00DF20FB + 6B8DE81510B0517A00DF20FB + 6B8DE81610B0517A00DF20FB + 6B8DE81710B0517A00DF20FB + 6B8DE81810B0517A00DF20FB + 6B8DE81910B0517A00DF20FB + 6B8DE81A10B0517A00DF20FB + 6B8DE82210B0528100DF20FB + 6B8DE82310B0528100DF20FB + 6B8DE82410B0528100DF20FB SplitCount @@ -430,18 +494,18 @@ GeometryConfiguration Frame - {{0, 0}, {976, 434}} + {{0, 0}, {976, 456}} RubberWindowFrame 0 59 1280 719 0 0 1280 778 Module PBXNavigatorGroup Proportion - 434pt + 456pt Proportion - 239pt + 217pt Tabs @@ -471,9 +535,7 @@ GeometryConfiguration Frame - {{10, 27}, {976, 212}} - RubberWindowFrame - 0 59 1280 719 0 0 1280 778 + {{10, 27}, {976, 175}} Module PBXProjectFindModule @@ -511,7 +573,9 @@ GeometryConfiguration Frame - {{10, 27}, {976, 155}} + {{10, 27}, {976, 190}} + RubberWindowFrame + 0 59 1280 719 0 0 1280 778 Module PBXBuildResultsModule diff --git a/RecastDemo/Include/Sample.h b/RecastDemo/Include/Sample.h index 00239c5..9487799 100644 --- a/RecastDemo/Include/Sample.h +++ b/RecastDemo/Include/Sample.h @@ -1,6 +1,16 @@ #ifndef RECASTSAMPLE_H #define RECASTSAMPLE_H +#include "RecastDebugDraw.h" + +struct DebugDrawGL : public rcDebugDraw +{ + virtual void begin(rcDebugDrawPrimitives prim, int nverts, float size = 1.0f); + virtual void vertex(const float* pos, unsigned int color); + virtual void vertex(const float x, const float y, const float z, unsigned int color); + virtual void end(); +}; + class Sample { diff --git a/RecastDemo/Source/Sample.cpp b/RecastDemo/Source/Sample.cpp index 1b66782..ab87bbc 100644 --- a/RecastDemo/Source/Sample.cpp +++ b/RecastDemo/Source/Sample.cpp @@ -5,12 +5,55 @@ #include "Recast.h" #include "RecastDebugDraw.h" #include "imgui.h" +#include "SDL.h" +#include "SDL_opengl.h" #ifdef WIN32 # define snprintf _snprintf #endif +void DebugDrawGL::begin(rcDebugDrawPrimitives prim, int nverts, float size) +{ + switch (prim) + { + case RC_DRAW_POINTS: + glPointSize(size); + glBegin(GL_POINTS); + break; + case RC_DRAW_LINES: + glLineWidth(size); + glBegin(GL_LINES); + break; + case RC_DRAW_TRIS: + glBegin(GL_TRIANGLES); + break; + case RC_DRAW_QUADS: + glBegin(GL_QUADS); + break; + }; +} + +void DebugDrawGL::vertex(const float* pos, unsigned int color) +{ + glColor4ubv((GLubyte*)&color); + glVertex3fv(pos); +} + +void DebugDrawGL::vertex(const float x, const float y, const float z, unsigned int color) +{ + glColor4ubv((GLubyte*)&color); + glVertex3f(x,y,z); +} + +void DebugDrawGL::end() +{ + glEnd(); + glLineWidth(1.0f); + glPointSize(1.0f); +} + + Sample::Sample() : m_verts(0), m_nverts(0), m_tris(0), m_trinorms(0), m_ntris(0) { @@ -37,11 +80,14 @@ void Sample::handleRender() { if (!m_verts || !m_tris || !m_trinorms) return; + + DebugDrawGL dd; + // Draw mesh - rcDebugDrawMesh(m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); + rcDebugDrawMesh(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); // Draw bounds float col[4] = {1,1,1,0.5f}; - rcDebugDrawBoxWire(m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); + rcDebugDrawBoxWire(&dd, m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); } void Sample::handleRenderOverlay(double* proj, double* model, int* view) diff --git a/RecastDemo/Source/Sample_StatMesh.cpp b/RecastDemo/Source/Sample_StatMesh.cpp index 8053d46..a1da83c 100644 --- a/RecastDemo/Source/Sample_StatMesh.cpp +++ b/RecastDemo/Source/Sample_StatMesh.cpp @@ -193,6 +193,8 @@ void Sample_StatMesh::toolRender(int flags) if (!m_navMesh) return; + DebugDrawGL dd; + static const float startCol[4] = { 0.5f, 0.1f, 0.0f, 0.75f }; static const float endCol[4] = { 0.2f, 0.4f, 0.0f, 0.75f }; static const float pathCol[4] = {0,0,0,0.25f}; @@ -262,7 +264,7 @@ void Sample_StatMesh::toolRender(int flags) { dtDebugDrawStatNavMeshPoly(m_navMesh, m_startRef, startCol); const float col[4] = {1,1,1,0.5f}; - rcDebugDrawCylinderWire(m_spos[0]-m_distanceToWall, m_spos[1]+0.02f, m_spos[2]-m_distanceToWall, + rcDebugDrawCylinderWire(&dd, m_spos[0]-m_distanceToWall, m_spos[1]+0.02f, m_spos[2]-m_distanceToWall, m_spos[0]+m_distanceToWall, m_spos[1]+m_agentHeight, m_spos[2]+m_distanceToWall, col); glLineWidth(3.0f); glColor4fv(col); @@ -274,7 +276,7 @@ void Sample_StatMesh::toolRender(int flags) } else if (m_toolMode == TOOLMODE_FIND_POLYS_AROUND) { - glLineWidth(2.0f); + const float cola[4] = {0,0,0,0.5f}; for (int i = 0; i < m_npolys; ++i) { dtDebugDrawStatNavMeshPoly(m_navMesh, m_polys[i], pathCol); @@ -283,17 +285,15 @@ void Sample_StatMesh::toolRender(int flags) float p0[3], p1[3]; getPolyCenter(m_navMesh, m_polys[i], p0); getPolyCenter(m_navMesh, m_parent[i], p1); - glColor4ub(0,0,0,128); - rcDrawArc(p0, p1); + rcDrawArc(&dd, p0, p1, cola, 2.0f); } } - glLineWidth(1.0f); const float dx = m_epos[0] - m_spos[0]; const float dz = m_epos[2] - m_spos[2]; float dist = sqrtf(dx*dx + dz*dz); const float col[4] = {1,1,1,0.5f}; - rcDebugDrawCylinderWire(m_spos[0]-dist, m_spos[1]+0.02f, m_spos[2]-dist, + rcDebugDrawCylinderWire(&dd, m_spos[0]-dist, m_spos[1]+0.02f, m_spos[2]-dist, m_spos[0]+dist, m_spos[1]+m_agentHeight, m_spos[2]+dist, col); } } @@ -320,11 +320,13 @@ void Sample_StatMesh::toolRenderOverlay(double* proj, double* model, int* view) void Sample_StatMesh::drawAgent(const float* pos, float r, float h, float c, const float* col) { + DebugDrawGL dd; + glDepthMask(GL_FALSE); // Agent dimensions. glLineWidth(2.0f); - rcDebugDrawCylinderWire(pos[0]-r, pos[1]+0.02f, pos[2]-r, pos[0]+r, pos[1]+h, pos[2]+r, col); + rcDebugDrawCylinderWire(&dd, pos[0]-r, pos[1]+0.02f, pos[2]-r, pos[0]+r, pos[1]+h, pos[2]+r, col); glLineWidth(1.0f); glColor4ub(0,0,0,196); diff --git a/RecastDemo/Source/Sample_StatMeshSimple.cpp b/RecastDemo/Source/Sample_StatMeshSimple.cpp index ec92d84..6311cc9 100644 --- a/RecastDemo/Source/Sample_StatMeshSimple.cpp +++ b/RecastDemo/Source/Sample_StatMeshSimple.cpp @@ -144,6 +144,8 @@ void Sample_StatMeshSimple::handleRender() return; float col[4]; + + DebugDrawGL dd; glEnable(GL_FOG); glDepthMask(GL_TRUE); @@ -151,12 +153,12 @@ void Sample_StatMeshSimple::handleRender() if (m_drawMode == DRAWMODE_MESH) { // Draw mesh - rcDebugDrawMeshSlope(m_verts, m_nverts, m_tris, m_trinorms, m_ntris, m_agentMaxSlope); + rcDebugDrawMeshSlope(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, m_agentMaxSlope); } else if (m_drawMode != DRAWMODE_NAVMESH_TRANS) { // Draw mesh - rcDebugDrawMesh(m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); + rcDebugDrawMesh(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); } glDisable(GL_FOG); @@ -164,7 +166,7 @@ void Sample_StatMeshSimple::handleRender() // Draw bounds col[0] = 1; col[1] = 1; col[2] = 1; col[3] = 0.5f; - rcDebugDrawBoxWire(m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); + rcDebugDrawBoxWire(&dd, m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); if (m_navMesh && (m_drawMode == DRAWMODE_NAVMESH || @@ -183,61 +185,61 @@ void Sample_StatMeshSimple::handleRender() glDepthMask(GL_TRUE); if (m_chf && m_drawMode == DRAWMODE_COMPACT) - rcDebugDrawCompactHeightfieldSolid(*m_chf); + rcDebugDrawCompactHeightfieldSolid(&dd, *m_chf); if (m_chf && m_drawMode == DRAWMODE_COMPACT_DISTANCE) - rcDebugDrawCompactHeightfieldDistance(*m_chf); + rcDebugDrawCompactHeightfieldDistance(&dd, *m_chf); if (m_chf && m_drawMode == DRAWMODE_COMPACT_REGIONS) - rcDebugDrawCompactHeightfieldRegions(*m_chf); + rcDebugDrawCompactHeightfieldRegions(&dd, *m_chf); if (m_solid && m_drawMode == DRAWMODE_VOXELS) { glEnable(GL_FOG); - rcDebugDrawHeightfieldSolid(*m_solid); + rcDebugDrawHeightfieldSolid(&dd, *m_solid); glDisable(GL_FOG); } if (m_solid && m_drawMode == DRAWMODE_VOXELS_WALKABLE) { glEnable(GL_FOG); - rcDebugDrawHeightfieldWalkable(*m_solid); + rcDebugDrawHeightfieldWalkable(&dd, *m_solid); glDisable(GL_FOG); } if (m_cset && m_drawMode == DRAWMODE_RAW_CONTOURS) { glDepthMask(GL_FALSE); - rcDebugDrawRawContours(*m_cset); + rcDebugDrawRawContours(&dd, *m_cset); glDepthMask(GL_TRUE); } if (m_cset && m_drawMode == DRAWMODE_BOTH_CONTOURS) { glDepthMask(GL_FALSE); - rcDebugDrawRawContours(*m_cset, 0.5f); - rcDebugDrawContours(*m_cset); + rcDebugDrawRawContours(&dd, *m_cset, 0.5f); + rcDebugDrawContours(&dd, *m_cset); glDepthMask(GL_TRUE); } if (m_cset && m_drawMode == DRAWMODE_CONTOURS) { glDepthMask(GL_FALSE); - rcDebugDrawContours(*m_cset); + rcDebugDrawContours(&dd, *m_cset); glDepthMask(GL_TRUE); } if (m_chf && m_cset && m_drawMode == DRAWMODE_REGION_CONNECTIONS) { - rcDebugDrawCompactHeightfieldRegions(*m_chf); + rcDebugDrawCompactHeightfieldRegions(&dd, *m_chf); glDepthMask(GL_FALSE); - rcDebugDrawRegionConnections(*m_cset); + rcDebugDrawRegionConnections(&dd, *m_cset); glDepthMask(GL_TRUE); } if (m_pmesh && m_drawMode == DRAWMODE_POLYMESH) { glDepthMask(GL_FALSE); - rcDebugDrawPolyMesh(*m_pmesh); + rcDebugDrawPolyMesh(&dd, *m_pmesh); glDepthMask(GL_TRUE); } if (m_dmesh && m_drawMode == DRAWMODE_POLYMESH_DETAIL) { glDepthMask(GL_FALSE); - rcDebugDrawPolyMeshDetail(*m_dmesh); + rcDebugDrawPolyMeshDetail(&dd, *m_dmesh); glDepthMask(GL_TRUE); } diff --git a/RecastDemo/Source/Sample_StatMeshTiled.cpp b/RecastDemo/Source/Sample_StatMeshTiled.cpp index aeb8362..4236f07 100644 --- a/RecastDemo/Source/Sample_StatMeshTiled.cpp +++ b/RecastDemo/Source/Sample_StatMeshTiled.cpp @@ -178,18 +178,20 @@ void Sample_StatMeshTiled::handleRender() float col[4]; + DebugDrawGL dd; + glEnable(GL_FOG); glDepthMask(GL_TRUE); if (m_drawMode == DRAWMODE_MESH) { // Draw mesh - rcDebugDrawMeshSlope(m_verts, m_nverts, m_tris, m_trinorms, m_ntris, m_agentMaxSlope); + rcDebugDrawMeshSlope(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, m_agentMaxSlope); } else if (m_drawMode != DRAWMODE_NAVMESH_TRANS) { // Draw mesh - rcDebugDrawMesh(m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); + rcDebugDrawMesh(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); } glDisable(GL_FOG); @@ -197,7 +199,7 @@ void Sample_StatMeshTiled::handleRender() // Draw bounds col[0] = 1; col[1] = 1; col[2] = 1; col[3] = 0.5f; - rcDebugDrawBoxWire(m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); + rcDebugDrawBoxWire(&dd, m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); // Tiling grid. const int ts = (int)m_tileSize; @@ -260,7 +262,7 @@ void Sample_StatMeshTiled::handleRender() for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].chf) - rcDebugDrawCompactHeightfieldSolid(*m_tileSet->tiles[i].chf); + rcDebugDrawCompactHeightfieldSolid(&dd, *m_tileSet->tiles[i].chf); } } @@ -269,7 +271,7 @@ void Sample_StatMeshTiled::handleRender() for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].chf) - rcDebugDrawCompactHeightfieldDistance(*m_tileSet->tiles[i].chf); + rcDebugDrawCompactHeightfieldDistance(&dd, *m_tileSet->tiles[i].chf); } } if (m_drawMode == DRAWMODE_COMPACT_REGIONS) @@ -277,7 +279,7 @@ void Sample_StatMeshTiled::handleRender() for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].chf) - rcDebugDrawCompactHeightfieldRegions(*m_tileSet->tiles[i].chf); + rcDebugDrawCompactHeightfieldRegions(&dd, *m_tileSet->tiles[i].chf); } } @@ -287,7 +289,7 @@ void Sample_StatMeshTiled::handleRender() for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].solid) - rcDebugDrawHeightfieldSolid(*m_tileSet->tiles[i].solid); + rcDebugDrawHeightfieldSolid(&dd, *m_tileSet->tiles[i].solid); } glDisable(GL_FOG); } @@ -297,7 +299,7 @@ void Sample_StatMeshTiled::handleRender() for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].solid) - rcDebugDrawHeightfieldWalkable(*m_tileSet->tiles[i].solid); + rcDebugDrawHeightfieldWalkable(&dd, *m_tileSet->tiles[i].solid); } glDisable(GL_FOG); } @@ -307,7 +309,7 @@ void Sample_StatMeshTiled::handleRender() for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].cset) - rcDebugDrawRawContours(*m_tileSet->tiles[i].cset); + rcDebugDrawRawContours(&dd, *m_tileSet->tiles[i].cset); } glDepthMask(GL_TRUE); } @@ -318,8 +320,8 @@ void Sample_StatMeshTiled::handleRender() { if (m_tileSet->tiles[i].cset) { - rcDebugDrawRawContours(*m_tileSet->tiles[i].cset, 0.5f); - rcDebugDrawContours(*m_tileSet->tiles[i].cset); + rcDebugDrawRawContours(&dd, *m_tileSet->tiles[i].cset, 0.5f); + rcDebugDrawContours(&dd, *m_tileSet->tiles[i].cset); } } glDepthMask(GL_TRUE); @@ -330,7 +332,7 @@ void Sample_StatMeshTiled::handleRender() for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].cset) - rcDebugDrawContours(*m_tileSet->tiles[i].cset); + rcDebugDrawContours(&dd, *m_tileSet->tiles[i].cset); } glDepthMask(GL_TRUE); } @@ -339,14 +341,14 @@ void Sample_StatMeshTiled::handleRender() for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].chf) - rcDebugDrawCompactHeightfieldRegions(*m_tileSet->tiles[i].chf); + rcDebugDrawCompactHeightfieldRegions(&dd, *m_tileSet->tiles[i].chf); } glDepthMask(GL_FALSE); for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].cset) - rcDebugDrawRegionConnections(*m_tileSet->tiles[i].cset); + rcDebugDrawRegionConnections(&dd, *m_tileSet->tiles[i].cset); } glDepthMask(GL_TRUE); } @@ -355,14 +357,14 @@ void Sample_StatMeshTiled::handleRender() glDepthMask(GL_FALSE); if (m_pmesh) { - rcDebugDrawPolyMesh(*m_pmesh); + rcDebugDrawPolyMesh(&dd, *m_pmesh); } else { for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].pmesh) - rcDebugDrawPolyMesh(*m_tileSet->tiles[i].pmesh); + rcDebugDrawPolyMesh(&dd, *m_tileSet->tiles[i].pmesh); } } @@ -373,14 +375,14 @@ void Sample_StatMeshTiled::handleRender() glDepthMask(GL_FALSE); if (m_dmesh) { - rcDebugDrawPolyMeshDetail(*m_dmesh); + rcDebugDrawPolyMeshDetail(&dd, *m_dmesh); } else { for (int i = 0; i < m_tileSet->width*m_tileSet->height; ++i) { if (m_tileSet->tiles[i].dmesh) - rcDebugDrawPolyMeshDetail(*m_tileSet->tiles[i].dmesh); + rcDebugDrawPolyMeshDetail(&dd, *m_tileSet->tiles[i].dmesh); } } glDepthMask(GL_TRUE); diff --git a/RecastDemo/Source/Sample_TileMesh.cpp b/RecastDemo/Source/Sample_TileMesh.cpp index b470523..37ea3fd 100644 --- a/RecastDemo/Source/Sample_TileMesh.cpp +++ b/RecastDemo/Source/Sample_TileMesh.cpp @@ -244,17 +244,19 @@ void Sample_TileMesh::handleRender() if (!m_verts || !m_tris || !m_trinorms) return; + DebugDrawGL dd; + // Draw mesh if (m_navMesh) - rcDebugDrawMesh(m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); + rcDebugDrawMesh(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, 0); else - rcDebugDrawMeshSlope(m_verts, m_nverts, m_tris, m_trinorms, m_ntris, m_agentMaxSlope); + rcDebugDrawMeshSlope(&dd, m_verts, m_nverts, m_tris, m_trinorms, m_ntris, m_agentMaxSlope); glDepthMask(GL_FALSE); // Draw bounds float col[4] = {1,1,1,0.5f}; - rcDebugDrawBoxWire(m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); + rcDebugDrawBoxWire(&dd, m_bmin[0],m_bmin[1],m_bmin[2], m_bmax[0],m_bmax[1],m_bmax[2], col); // Tiling grid. const int ts = (int)m_tileSize; @@ -294,7 +296,7 @@ void Sample_TileMesh::handleRender() glEnd(); // Draw active tile - rcDebugDrawBoxWire(m_tileBmin[0],m_tileBmin[1],m_tileBmin[2], m_tileBmax[0],m_tileBmax[1],m_tileBmax[2], m_tileCol); + rcDebugDrawBoxWire(&dd, m_tileBmin[0],m_tileBmin[1],m_tileBmin[2], m_tileBmax[0],m_tileBmax[1],m_tileBmax[2], m_tileCol); if (m_navMesh) dtDebugDrawTiledNavMesh(m_navMesh); @@ -389,7 +391,7 @@ void Sample_TileMesh::handleRender() { dtDebugDrawTiledNavMeshPoly(m_navMesh, m_startRef, startCol); const float col[4] = {1,1,1,0.5f}; - rcDebugDrawCylinderWire(m_spos[0]-m_distanceToWall, m_spos[1]+0.02f, m_spos[2]-m_distanceToWall, + rcDebugDrawCylinderWire(&dd, m_spos[0]-m_distanceToWall, m_spos[1]+0.02f, m_spos[2]-m_distanceToWall, m_spos[0]+m_distanceToWall, m_spos[1]+m_agentHeight, m_spos[2]+m_distanceToWall, col); glLineWidth(3.0f); glColor4fv(col); @@ -401,7 +403,7 @@ void Sample_TileMesh::handleRender() } else if (m_toolMode == TOOLMODE_FIND_POLYS_AROUND) { - glLineWidth(2.0f); + const float cola[4] = {0,0,0,0.5f}; for (int i = 0; i < m_npolys; ++i) { dtDebugDrawTiledNavMeshPoly(m_navMesh, m_polys[i], pathCol); @@ -411,16 +413,15 @@ void Sample_TileMesh::handleRender() getPolyCenter(m_navMesh, m_polys[i], p0); getPolyCenter(m_navMesh, m_parent[i], p1); glColor4ub(0,0,0,128); - rcDrawArc(p0, p1); + rcDrawArc(&dd, p0, p1, cola, 2.0f); } } - glLineWidth(1.0f); const float dx = m_epos[0] - m_spos[0]; const float dz = m_epos[2] - m_spos[2]; float dist = sqrtf(dx*dx + dz*dz); const float col[4] = {1,1,1,0.5f}; - rcDebugDrawCylinderWire(m_spos[0]-dist, m_spos[1]+0.02f, m_spos[2]-dist, + rcDebugDrawCylinderWire(&dd, m_spos[0]-dist, m_spos[1]+0.02f, m_spos[2]-dist, m_spos[0]+dist, m_spos[1]+m_agentHeight, m_spos[2]+dist, col); }