Fixed up SFML.

This commit is contained in:
badlogic 2018-05-30 17:37:05 +02:00
parent 878a6e6435
commit dc4ab94644
3 changed files with 16 additions and 13 deletions

View File

@ -34,7 +34,7 @@
#include <SFML/Graphics.hpp> #include <SFML/Graphics.hpp>
using namespace std; using namespace std;
using namespace Spine; using namespace spine;
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -127,7 +127,7 @@ void spineboy (SkeletonData* skeletonData, Atlas* atlas) {
Slot* headSlot = skeleton->findSlot("head"); Slot* headSlot = skeleton->findSlot("head");
drawable->state->setOnAnimationEventFunc(callback); drawable->state->setListener(callback);
drawable->state->addAnimation(0, "walk", true, 0); drawable->state->addAnimation(0, "walk", true, 0);
drawable->state->addAnimation(0, "jump", false, 3); drawable->state->addAnimation(0, "jump", false, 3);
drawable->state->addAnimation(0, "run", true, 0); drawable->state->addAnimation(0, "run", true, 0);
@ -452,7 +452,7 @@ void test (SkeletonData* skeletonData, Atlas* atlas) {
} }
int main () { int main () {
DebugExtension dbgExtension; DebugExtension dbgExtension(SpineExtension::getInstance());
SpineExtension::setInstance(&dbgExtension); SpineExtension::setInstance(&dbgExtension);
testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor.atlas", 0.5f); testcase(raptor, "data/raptor-pro.json", "data/raptor-pro.skel", "data/raptor.atlas", 0.5f);

View File

@ -48,7 +48,7 @@ sf::BlendMode additivePma = sf::BlendMode(sf::BlendMode::One, sf::BlendMode::One
sf::BlendMode multiplyPma = sf::BlendMode(sf::BlendMode::DstColor, sf::BlendMode::OneMinusSrcAlpha); sf::BlendMode multiplyPma = sf::BlendMode(sf::BlendMode::DstColor, sf::BlendMode::OneMinusSrcAlpha);
sf::BlendMode screenPma = sf::BlendMode(sf::BlendMode::One, sf::BlendMode::OneMinusSrcColor); sf::BlendMode screenPma = sf::BlendMode(sf::BlendMode::One, sf::BlendMode::OneMinusSrcColor);
namespace Spine { namespace spine {
SkeletonDrawable::SkeletonDrawable(SkeletonData *skeletonData, AnimationStateData *stateData) : SkeletonDrawable::SkeletonDrawable(SkeletonData *skeletonData, AnimationStateData *stateData) :
timeScale(1), timeScale(1),
@ -115,13 +115,13 @@ void SkeletonDrawable::draw(RenderTarget &target, RenderStates states) const {
uvs = &regionAttachment->getUVs(); uvs = &regionAttachment->getUVs();
indices = &quadIndices; indices = &quadIndices;
indicesCount = 6; indicesCount = 6;
texture = (Texture *) ((AtlasRegion *) regionAttachment->getRendererObject())->page->rendererObject; texture = (Texture *) ((AtlasRegion *) regionAttachment->getRendererObject())->page->getRendererObject();
attachmentColor = &regionAttachment->getColor(); attachmentColor = &regionAttachment->getColor();
} else if (attachment->getRTTI().isExactly(MeshAttachment::rtti)) { } else if (attachment->getRTTI().isExactly(MeshAttachment::rtti)) {
MeshAttachment *mesh = (MeshAttachment *) attachment; MeshAttachment *mesh = (MeshAttachment *) attachment;
worldVertices.setSize(mesh->getWorldVerticesLength(), 0); worldVertices.setSize(mesh->getWorldVerticesLength(), 0);
texture = (Texture *) ((AtlasRegion *) mesh->getRendererObject())->page->rendererObject; texture = (Texture *) ((AtlasRegion *) mesh->getRendererObject())->page->getRendererObject();
mesh->computeWorldVertices(slot, 0, mesh->getWorldVerticesLength(), worldVertices, 0, 2); mesh->computeWorldVertices(slot, 0, mesh->getWorldVerticesLength(), worldVertices, 0, 2);
verticesCount = mesh->getWorldVerticesLength() >> 1; verticesCount = mesh->getWorldVerticesLength() >> 1;
uvs = &mesh->getUVs(); uvs = &mesh->getUVs();
@ -196,7 +196,7 @@ void SkeletonDrawable::draw(RenderTarget &target, RenderStates states) const {
} }
if (clipper.isClipping()) { if (clipper.isClipping()) {
clipper.clipTriangles(worldVertices, verticesCount << 1, *indices, indicesCount, *uvs); clipper.clipTriangles(worldVertices, *indices, *uvs, 2);
vertices = &clipper.getClippedVertices(); vertices = &clipper.getClippedVertices();
verticesCount = clipper.getClippedVertices().size() >> 1; verticesCount = clipper.getClippedVertices().size() >> 1;
uvs = &clipper.getClippedUVs(); uvs = &clipper.getClippedUVs();
@ -257,6 +257,10 @@ void SkeletonDrawable::draw(RenderTarget &target, RenderStates states) const {
if (vertexEffect != 0) vertexEffect->end(); if (vertexEffect != 0) vertexEffect->end();
} }
void deleteTexture(void* texture) {
delete (Texture *) texture;
}
void SFMLTextureLoader::load(AtlasPage &page, const String &path) { void SFMLTextureLoader::load(AtlasPage &page, const String &path) {
Texture *texture = new Texture(); Texture *texture = new Texture();
if (!texture->loadFromFile(path.buffer())) return; if (!texture->loadFromFile(path.buffer())) return;
@ -264,18 +268,17 @@ void SFMLTextureLoader::load(AtlasPage &page, const String &path) {
if (page.magFilter == TextureFilter_Linear) texture->setSmooth(true); if (page.magFilter == TextureFilter_Linear) texture->setSmooth(true);
if (page.uWrap == TextureWrap_Repeat && page.vWrap == TextureWrap_Repeat) texture->setRepeated(true); if (page.uWrap == TextureWrap_Repeat && page.vWrap == TextureWrap_Repeat) texture->setRepeated(true);
page.rendererObject = texture; page.setRendererObject(texture, deleteTexture);
Vector2u size = texture->getSize(); Vector2u size = texture->getSize();
page.width = size.x; page.width = size.x;
page.height = size.y; page.height = size.y;
} }
void SFMLTextureLoader::unload(void *texture) { void SFMLTextureLoader::unload(void *texture) {
delete (Texture *) texture; deleteTexture(texture);
} }
String SFMLTextureLoader::toString() const { SpineExtension *getDefaultExtension() {
return String("SFMLTextureLoader"); return new DefaultSpineExtension();
} }
} }

View File

@ -39,7 +39,7 @@
#include <SFML/Graphics/RenderStates.hpp> #include <SFML/Graphics/RenderStates.hpp>
namespace Spine { namespace spine {
class SkeletonDrawable : public sf::Drawable { class SkeletonDrawable : public sf::Drawable {
public: public: