mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 09:16:01 +08:00
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:
parent
a5023f521c
commit
7183e3b0bd
@ -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;
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user