Feature/new skeleton culling (#1196)

* Fix culling of skeleton and clean up code

* Optionally draw the bounding rectangle of skeletons

* Add Visual Studio compiler support

* Fix indentation

* Fix indentation

* Fix indentation

* Revert some indentation changes
This commit is contained in:
sp-stefano-lanza 2018-10-16 15:46:49 +02:00 committed by Mario Zechner
parent a5023f521c
commit 7183e3b0bd
11 changed files with 505 additions and 313 deletions

View File

@ -65,7 +65,7 @@ bool AppDelegate::applicationDidFinishLaunching () {
glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);
#endif
Size frameSize = glview->getFrameSize();
cocos2d::Size frameSize = glview->getFrameSize();
vector<string> searchPath;

View File

@ -67,14 +67,14 @@ bool BatchingExample::init () {
int xMin = _contentSize.width * 0.10f, xMax = _contentSize.width * 0.90f;
int yMin = 0, yMax = _contentSize.height * 0.7f;
for (int i = 0, j = 0; i < NUM_SKELETONS; i++) {
for (int i = 0; i < NUM_SKELETONS; i++) {
// Each skeleton node shares the same atlas, skeleton data, and mix times.
SkeletonAnimation* skeletonNode = SkeletonAnimation::createWithData(_skeletonData, false);
skeletonNode->setAnimationStateData(_stateData);
skeletonNode->setAnimation(0, "walk", true);
skeletonNode->addAnimation(0, "jump", true, RandomHelper::random_int(0, 300) / 100.0f);
skeletonNode->addAnimation(0, "run", true);
skeletonNode->addAnimation(0, "run", true);
// alternative setting two color tint for groups of 10 skeletons
// should end up with #skeletons / 10 batches

View File

@ -53,8 +53,10 @@ bool CoinExample::init () {
EventListenerTouchOneByOne* listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [this] (Touch* touch, Event* event) -> bool {
if (!skeletonNode->getDebugBonesEnabled())
skeletonNode->setDebugBonesEnabled(true);
if (!skeletonNode->getDebugBonesEnabled()) {
skeletonNode->setDebugBonesEnabled(true);
skeletonNode->setDebugBoundingRectEnabled(true);
}
else if (skeletonNode->getTimeScale() == 1)
skeletonNode->setTimeScale(0.3f);
else

View File

@ -54,8 +54,10 @@ bool GoblinsExample::init () {
EventListenerTouchOneByOne* listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [this] (Touch* touch, Event* event) -> bool {
if (!skeletonNode->getDebugBonesEnabled())
skeletonNode->setDebugBonesEnabled(true);
if (!skeletonNode->getDebugBonesEnabled()) {
skeletonNode->setDebugBonesEnabled(true);
skeletonNode->setDebugBoundingRectEnabled(true);
}
else if (skeletonNode->getTimeScale() == 1)
skeletonNode->setTimeScale(0.3f);
else

View File

@ -66,7 +66,8 @@ bool RaptorExample::init () {
listener->onTouchBegan = [this] (Touch* touch, Event* event) -> bool {
if (!skeletonNode->getDebugBonesEnabled()) {
skeletonNode->setDebugBonesEnabled(true);
skeletonNode->setDebugMeshesEnabled(true);
skeletonNode->setDebugMeshesEnabled(true);
skeletonNode->setDebugBoundingRectEnabled(true);
} else if (skeletonNode->getTimeScale() == 1)
skeletonNode->setTimeScale(0.3f);
else

View File

@ -77,8 +77,15 @@ bool SkeletonRendererSeparatorExample::init () {
EventListenerTouchOneByOne* listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [this] (Touch* touch, Event* event) -> bool {
if (!backNode->getDebugBonesEnabled())
backNode->setDebugBonesEnabled(true);
if (!backNode->getDebugBonesEnabled())
{
backNode->setDebugBonesEnabled(true);
backNode->setDebugSlotsEnabled(true);
backNode->setDebugBoundingRectEnabled(true);
frontNode->setDebugBonesEnabled(true);
frontNode->setDebugSlotsEnabled(true);
frontNode->setDebugBoundingRectEnabled(true);
}
else if (backNode->getTimeScale() == 1)
backNode->setTimeScale(0.3f);
else

View File

@ -84,8 +84,10 @@ bool SpineboyExample::init () {
EventListenerTouchOneByOne* listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [this] (Touch* touch, Event* event) -> bool {
if (!skeletonNode->getDebugBonesEnabled())
skeletonNode->setDebugBonesEnabled(true);
if (!skeletonNode->getDebugBonesEnabled()) {
skeletonNode->setDebugBonesEnabled(true);
skeletonNode->setDebugBoundingRectEnabled(true);
}
else if (skeletonNode->getTimeScale() == 1)
skeletonNode->setTimeScale(0.3f);
else

View File

@ -53,8 +53,11 @@ bool TankExample::init () {
EventListenerTouchOneByOne* listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [this] (Touch* touch, Event* event) -> bool {
if (!skeletonNode->getDebugBonesEnabled())
skeletonNode->setDebugBonesEnabled(true);
if (!skeletonNode->getDebugBonesEnabled()) {
skeletonNode->setDebugBonesEnabled(true);
skeletonNode->setDebugSlotsEnabled(true);
skeletonNode->setDebugBoundingRectEnabled(true);
}
else if (skeletonNode->getTimeScale() == 1)
skeletonNode->setTimeScale(0.3f);
else

File diff suppressed because it is too large Load Diff

View File

@ -49,12 +49,11 @@ public:
virtual void update (float deltaTime) override;
virtual void draw (cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t transformFlags) override;
virtual void drawDebug (cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t transformFlags);
virtual cocos2d::Rect getBoundingBox () const override;
virtual void onEnter () override;
virtual void onExit () override;
spSkeleton* getSkeleton();
spSkeleton* getSkeleton() const;
void setTimeScale(float scale);
float getTimeScale() const;
@ -68,6 +67,9 @@ public:
void setDebugMeshesEnabled(bool enabled);
bool getDebugMeshesEnabled() const;
void setDebugBoundingRectEnabled(bool enabled);
bool getDebugBoundingRectEnabled() const;
// --- Convenience methods for common Skeleton_* functions.
void updateWorldTransform ();
@ -113,9 +115,6 @@ public:
virtual void setOpacityModifyRGB (bool value) override;
virtual bool isOpacityModifyRGB () const override;
// Frees global memory used for temporay vertex transformations.
static void destroyScratchBuffers();
CC_CONSTRUCTOR_ACCESS:
SkeletonRenderer ();
SkeletonRenderer(spSkeleton* skeleton, bool ownsSkeleton = false, bool ownsSkeletonData = false);
@ -139,6 +138,7 @@ protected:
virtual AttachmentVertices* getAttachmentVertices (spRegionAttachment* attachment) const;
virtual AttachmentVertices* getAttachmentVertices (spMeshAttachment* attachment) const;
void setupGLProgramState(bool twoColorTintEnabled);
virtual void drawDebug (cocos2d::Renderer* renderer, const cocos2d::Mat4& transform, uint32_t transformFlags);
bool _ownsSkeletonData;
bool _ownsSkeleton;
@ -152,8 +152,10 @@ protected:
bool _debugSlots;
bool _debugBones;
bool _debugMeshes;
bool _debugBoundingRect;
spSkeletonClipping* _clipper;
spVertexEffect* _effect;
cocos2d::Rect _boundingRect;
int _startSlotIndex;
int _endSlotIndex;

View File

@ -57,7 +57,7 @@ void TwoColorTrianglesCommand::init(float globalOrder, GLuint textureID, GLProgr
if(_triangles.indexCount % 3 != 0) {
int count = _triangles.indexCount;
_triangles.indexCount = count / 3 * 3;
CCLOGERROR("Resize indexCount from %zd to %zd, size must be multiple times of 3", count, _triangles.indexCount);
CCLOGERROR("Resize indexCount from %d to %d, size must be multiple times of 3", count, _triangles.indexCount);
}
_mv = mv;