Skip to content

Commit

Permalink
Merge pull request moai#3 from patrickmeehan/feature/longjmp
Browse files Browse the repository at this point in the history
handling tessellator error and pumping out error status
  • Loading branch information
patrickmeehan committed Jul 14, 2014
2 parents e9f678e + b4266c9 commit 064f937
Show file tree
Hide file tree
Showing 20 changed files with 460 additions and 340 deletions.
1 change: 1 addition & 0 deletions src/lua-headers/moai.lua
Expand Up @@ -490,6 +490,7 @@ MOAIXmlParser.extend (
local element = {
getAttribute = function ( name ) return parser:getElementAttribute ( name ) end,
getAttributes = function () return parser:getElementAttributes () end,
getLineNumber = function () return parser:getElementLineNumber () end,
getName = function () return parser:getElementName () end,
getText = function () return parser:getElementText () end,
}
Expand Down
431 changes: 218 additions & 213 deletions src/lua-headers/moai_lua.h

Large diffs are not rendered by default.

17 changes: 10 additions & 7 deletions src/moai-sim/MOAIVectorCombo.cpp
Expand Up @@ -4,29 +4,32 @@
#include "pch.h"
#include <moai-sim/MOAIVectorTesselator.h>
#include <moai-sim/MOAIVectorCombo.h>
#include <moai-sim/MOAIVectorUtil.h>
#include <tesselator.h>

//================================================================//
// MOAIVectorCombo
//================================================================//

//----------------------------------------------------------------//
void MOAIVectorCombo::AddFillContours ( TESStesselator* tess ) {
int MOAIVectorCombo::AddFillContours ( SafeTesselator* tess ) {

TESStesselator* outline = tessNewTess ( 0 );
assert ( outline );
SafeTesselator outline;
//assert ( outline );

for ( u32 i = 0; i < this->mShapes.Size (); ++i ) {
MOAIVectorShape& shape = *this->mShapes [ i ];
//if ( shape.IsClosed ()) {
shape.AddFillContours ( outline );
shape.AddFillContours ( &outline );
//}
}

tessTesselate ( outline, ( int )this->mStyle.GetWindingRule (), TESS_BOUNDARY_CONTOURS, 0, 0, ( const TESSreal* )&sNormal );
this->CopyBoundaries ( tess, outline );
int error = outline.Tesselate ( ( int )this->mStyle.GetWindingRule (), TESS_BOUNDARY_CONTOURS, 0, 0, ( const TESSreal* )&sNormal );
if ( error ) return error;

tessDeleteTess ( outline );
this->CopyBoundaries ( tess, &outline );

return error;
}


Expand Down
2 changes: 1 addition & 1 deletion src/moai-sim/MOAIVectorCombo.h
Expand Up @@ -18,7 +18,7 @@ class MOAIVectorCombo :
public:

//----------------------------------------------------------------//
void AddFillContours ( TESStesselator* tess );
int AddFillContours ( SafeTesselator* tess );
bool IsClosed ();
bool GroupShapes ( MOAIVectorShape** shapes, u32 total );
MOAIVectorCombo ();
Expand Down
13 changes: 8 additions & 5 deletions src/moai-sim/MOAIVectorEllipse.cpp
Expand Up @@ -4,15 +4,16 @@
#include "pch.h"
#include <moai-sim/MOAIVectorTesselator.h>
#include <moai-sim/MOAIVectorEllipse.h>
#include <moai-sim/MOAIVectorUtil.h>
#include <tesselator.h>

//================================================================//
// MOAIVectorEllipse
//================================================================//

//----------------------------------------------------------------//
void MOAIVectorEllipse::AddFillContours ( TESStesselator* tess ) {

int MOAIVectorEllipse::AddFillContours ( SafeTesselator* tess ) {
u32 steps = this->mStyle.GetCircleResolution ();

ZLVec2D* verts = ( ZLVec2D* )alloca ( sizeof ( ZLVec2D ) * steps );
Expand All @@ -25,13 +26,15 @@ void MOAIVectorEllipse::AddFillContours ( TESStesselator* tess ) {
verts [ i ].mY = this->mLoc.mY + ( Sin ( angle ) * this->mYRad );
this->mStyle.GetDrawingToWorld ().Transform ( verts [ i ]);
}
tessAddContour ( tess, 2, verts, sizeof ( ZLVec2D ), steps );
tessAddContour ( tess->mTess, 2, verts, sizeof ( ZLVec2D ), steps );

return 0;
}

//----------------------------------------------------------------//
void MOAIVectorEllipse::AddStrokeContours ( TESStesselator* tess ) {
int MOAIVectorEllipse::AddStrokeContours ( SafeTesselator* tess ) {

MOAIVectorShape::AddStrokeContours ( tess );
return MOAIVectorShape::AddStrokeContours ( tess );
}

//----------------------------------------------------------------//
Expand Down
6 changes: 4 additions & 2 deletions src/moai-sim/MOAIVectorEllipse.h
Expand Up @@ -6,6 +6,8 @@

#include <moai-sim/MOAIVectorShape.h>

class SafeTesselator;

//================================================================//
// MOAIVectorEllipse
//================================================================//
Expand All @@ -20,8 +22,8 @@ class MOAIVectorEllipse :
public:

//----------------------------------------------------------------//
void AddFillContours ( TESStesselator* tess );
void AddStrokeContours ( TESStesselator* tess );
int AddFillContours ( SafeTesselator* tess );
int AddStrokeContours ( SafeTesselator* tess );
void Init ( float x, float y, float xRad, float yRad );
bool IsClosed ();
MOAIVectorEllipse ();
Expand Down
24 changes: 13 additions & 11 deletions src/moai-sim/MOAIVectorPoly.cpp
Expand Up @@ -12,27 +12,27 @@
//================================================================//

//----------------------------------------------------------------//
void MOAIVectorPoly::AddFillContours ( TESStesselator* tess ) {
int MOAIVectorPoly::AddFillContours ( SafeTesselator* tess ) {

if ( this->mVertices.Size () < 3 ) return;

TESStesselator* outline = tessNewTess ( 0 );
assert ( outline );
SafeTesselator outline;

tessAddContour ( outline, 2, this->mVertices.Data (), sizeof ( ZLVec2D ), this->mVertices.Size ());
tessAddContour ( outline.mTess, 2, this->mVertices.Data (), sizeof ( ZLVec2D ), this->mVertices.Size ());

tessTesselate ( outline, ( int )this->mStyle.GetWindingRule (), TESS_BOUNDARY_CONTOURS, 0, 0, ( const TESSreal* )&sNormal );
this->CopyBoundaries ( tess, outline );
int error = outline.Tesselate ( ( int )this->mStyle.GetWindingRule (), TESS_BOUNDARY_CONTOURS, 0, 0, ( const TESSreal* )&sNormal );
if ( error ) return error;

tessDeleteTess ( outline );
this->CopyBoundaries ( tess, &outline );

return error;
}

//----------------------------------------------------------------//
void MOAIVectorPoly::AddStrokeContours ( TESStesselator* tess ) {
int MOAIVectorPoly::AddStrokeContours ( SafeTesselator* tess ) {

if ( this->mIsClosed ) {
MOAIVectorShape::AddStrokeContours ( tess );
return;
return MOAIVectorShape::AddStrokeContours ( tess );
}

int nVerts = ( int )this->mVertices.Size ();
Expand Down Expand Up @@ -76,7 +76,9 @@ void MOAIVectorPoly::AddStrokeContours ( TESStesselator* tess ) {
MOAIVectorUtil::StrokeLine ( this->mStyle, contour0, joins0, nJoins, width, false );
MOAIVectorUtil::StrokeLine ( this->mStyle, contour1, joins1, nJoins, width, false );

tessAddContour ( tess, 2, contour, sizeof ( ZLVec2D ), nContourVerts );
tessAddContour ( tess->mTess, 2, contour, sizeof ( ZLVec2D ), nContourVerts );

return 0;
}

//----------------------------------------------------------------//
Expand Down
4 changes: 2 additions & 2 deletions src/moai-sim/MOAIVectorPoly.h
Expand Up @@ -19,8 +19,8 @@ class MOAIVectorPoly :
public:

//----------------------------------------------------------------//
void AddFillContours ( TESStesselator* tess );
void AddStrokeContours ( TESStesselator* tess );
int AddFillContours ( SafeTesselator* tess );
int AddStrokeContours ( SafeTesselator* tess );
bool IsClosed ();
MOAIVectorPoly ();
~MOAIVectorPoly ();
Expand Down
11 changes: 7 additions & 4 deletions src/moai-sim/MOAIVectorRect.cpp
Expand Up @@ -4,14 +4,15 @@
#include "pch.h"
#include <moai-sim/MOAIVectorTesselator.h>
#include <moai-sim/MOAIVectorRect.h>
#include <moai-sim/MOAIVectorUtil.h>
#include <tesselator.h>

//================================================================//
// MOAIVectorRect
//================================================================//

//----------------------------------------------------------------//
void MOAIVectorRect::AddFillContours ( TESStesselator* tess ) {
int MOAIVectorRect::AddFillContours ( SafeTesselator* tess ) {

ZLVec2D* verts = ( ZLVec2D* )alloca ( sizeof ( ZLVec2D ) * 4 );

Expand All @@ -32,13 +33,15 @@ void MOAIVectorRect::AddFillContours ( TESStesselator* tess ) {
this->mStyle.GetDrawingToWorld ().Transform ( verts [ 2 ]);
this->mStyle.GetDrawingToWorld ().Transform ( verts [ 3 ]);

tessAddContour ( tess, 2, verts, sizeof ( ZLVec2D ), 4 );
tessAddContour ( tess->mTess, 2, verts, sizeof ( ZLVec2D ), 4 );

return 0;
}

//----------------------------------------------------------------//
void MOAIVectorRect::AddStrokeContours ( TESStesselator* tess ) {
int MOAIVectorRect::AddStrokeContours ( SafeTesselator* tess ) {

MOAIVectorShape::AddStrokeContours ( tess );
return MOAIVectorShape::AddStrokeContours ( tess );
}

//----------------------------------------------------------------//
Expand Down
4 changes: 2 additions & 2 deletions src/moai-sim/MOAIVectorRect.h
Expand Up @@ -18,8 +18,8 @@ class MOAIVectorRect :
public:

//----------------------------------------------------------------//
void AddFillContours ( TESStesselator* tess );
void AddStrokeContours ( TESStesselator* tess );
int AddFillContours ( SafeTesselator* tess );
int AddStrokeContours ( SafeTesselator* tess );
void Init ( float xMin, float yMin, float xMax, float yMax );
bool IsClosed ();
MOAIVectorRect ();
Expand Down

0 comments on commit 064f937

Please sign in to comment.