Blame view

ios/cocos2d/cocos/editor-support/spine/spine-cocos2dx.cpp 7.03 KB
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
1
  /******************************************************************************
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
2
3
   * Spine Runtimes License Agreement
   * Last updated May 1, 2019. Replaces all prior versions.
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
4
   *
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
5
   * Copyright (c) 2013-2019, Esoteric Software LLC
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
6
   *
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
7
8
9
10
   * Integration of the Spine Runtimes into software or otherwise creating
   * derivative works of the Spine Runtimes is permitted under the terms and
   * conditions of Section 2 of the Spine Editor License Agreement:
   * http://esotericsoftware.com/spine-editor-license
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
11
   *
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
   * Otherwise, it is permitted to integrate the Spine Runtimes into software
   * or otherwise create derivative works of the Spine Runtimes (collectively,
   * "Products"), provided that each user of the Products must obtain their own
   * Spine Editor license and redistribution of the Products in any form must
   * include this license and copyright notice.
   *
   * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY EXPRESS
   * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
   * NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY DIRECT, INDIRECT,
   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS
   * INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY
   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
28
29
30
   *****************************************************************************/
  
  #include <spine/spine-cocos2dx.h>
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
31
32
  #include <spine/Extension.h>
  #include <spine/AttachmentVertices.h>
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
33
34
  
  USING_NS_CC;
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  using namespace spine;
  
  static void deleteAttachmentVertices (void* vertices) {
  	delete (AttachmentVertices *) vertices;
  }
  
  static unsigned short quadTriangles[6] = {0, 1, 2, 2, 3, 0};
  
  static void setAttachmentVertices(RegionAttachment* attachment) {
  	AtlasRegion* region = (AtlasRegion*)attachment->getRendererObject();
  	AttachmentVertices* attachmentVertices = new AttachmentVertices((Texture2D*)region->page->getRendererObject(), 4, quadTriangles, 6);
  	V3F_C4B_T2F* vertices = attachmentVertices->_triangles->verts;
  	for (int i = 0, ii = 0; i < 4; ++i, ii += 2) {
  		vertices[i].texCoords.u = attachment->getUVs()[ii];
  		vertices[i].texCoords.v = attachment->getUVs()[ii + 1];
  	}
  	attachment->setRendererObject(attachmentVertices, deleteAttachmentVertices);
  }
  
  static void setAttachmentVertices(MeshAttachment* attachment) {
  	AtlasRegion* region = (AtlasRegion*)attachment->getRendererObject();
  	AttachmentVertices* attachmentVertices = new AttachmentVertices((Texture2D*)region->page->getRendererObject(),
  																	attachment->getWorldVerticesLength() >> 1, attachment->getTriangles().buffer(), attachment->getTriangles().size());
  	V3F_C4B_T2F* vertices = attachmentVertices->_triangles->verts;
  	for (int i = 0, ii = 0, nn = attachment->getWorldVerticesLength(); ii < nn; ++i, ii += 2) {
  		vertices[i].texCoords.u = attachment->getUVs()[ii];
  		vertices[i].texCoords.v = attachment->getUVs()[ii + 1];
  	}
  	attachment->setRendererObject(attachmentVertices, deleteAttachmentVertices);
  }
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
65
  
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
66
  Cocos2dAtlasAttachmentLoader::Cocos2dAtlasAttachmentLoader(Atlas* atlas): AtlasAttachmentLoader(atlas) {
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
67
68
  }
  
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  Cocos2dAtlasAttachmentLoader::~Cocos2dAtlasAttachmentLoader() { }
  
  void Cocos2dAtlasAttachmentLoader::configureAttachment(Attachment* attachment) {
  	if (attachment->getRTTI().isExactly(RegionAttachment::rtti)) {
  		setAttachmentVertices((RegionAttachment*)attachment);
  	} else if (attachment->getRTTI().isExactly(MeshAttachment::rtti)) {
  		setAttachmentVertices((MeshAttachment*)attachment);
  	}
  }
  
  #if COCOS2D_VERSION >= 0x0040000
  
  backend::SamplerAddressMode wrap (TextureWrap wrap) {
  	return wrap ==  TextureWrap_ClampToEdge ? backend::SamplerAddressMode::CLAMP_TO_EDGE : backend::SamplerAddressMode::REPEAT;
  }
  
  backend::SamplerFilter filter (TextureFilter filter) {
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
86
  	switch (filter) {
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
87
  	case TextureFilter_Unknown:
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
88
  		break;
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  	case TextureFilter_Nearest:
  		return backend::SamplerFilter::NEAREST;
  	case TextureFilter_Linear:
  		return backend::SamplerFilter::LINEAR;
  	case TextureFilter_MipMap:
  		return backend::SamplerFilter::LINEAR;
  	case TextureFilter_MipMapNearestNearest:
  		return backend::SamplerFilter::NEAREST;
  	case TextureFilter_MipMapLinearNearest:
          return backend::SamplerFilter::NEAREST;
  	case TextureFilter_MipMapNearestLinear:
          return backend::SamplerFilter::LINEAR;
  	case TextureFilter_MipMapLinearLinear:
          return backend::SamplerFilter::LINEAR;
  	}
  	return backend::SamplerFilter::LINEAR;
  }
  
  #else
  
  GLuint wrap (TextureWrap wrap) {
  	return wrap ==  TextureWrap_ClampToEdge ? GL_CLAMP_TO_EDGE : GL_REPEAT;
  }
  
  GLuint filter (TextureFilter filter) {
  	switch (filter) {
  	case TextureFilter_Unknown:
  		break;
  	case TextureFilter_Nearest:
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
118
  		return GL_NEAREST;
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
119
  	case TextureFilter_Linear:
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
120
  		return GL_LINEAR;
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
121
  	case TextureFilter_MipMap:
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
122
  		return GL_LINEAR_MIPMAP_LINEAR;
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
123
  	case TextureFilter_MipMapNearestNearest:
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
124
  		return GL_NEAREST_MIPMAP_NEAREST;
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
125
  	case TextureFilter_MipMapLinearNearest:
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
126
  		return GL_LINEAR_MIPMAP_NEAREST;
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
127
  	case TextureFilter_MipMapNearestLinear:
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
128
  		return GL_NEAREST_MIPMAP_LINEAR;
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
129
  	case TextureFilter_MipMapLinearLinear:
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
130
131
132
133
134
  		return GL_LINEAR_MIPMAP_LINEAR;
  	}
  	return GL_LINEAR;
  }
  
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
135
  #endif
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
136
  
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
137
138
  Cocos2dTextureLoader::Cocos2dTextureLoader() : TextureLoader() { }
  Cocos2dTextureLoader::~Cocos2dTextureLoader() { }
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
139
  
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
  void Cocos2dTextureLoader::load(AtlasPage& page, const spine::String& path) {
  	Texture2D* texture = Director::getInstance()->getTextureCache()->addImage(path.buffer());
  	CCASSERT(texture != nullptr, "Invalid image");
  	if (texture) {
  		texture->retain();
  #if COCOS2D_VERSION >= 0x0040000
  		Texture2D::TexParams textureParams(filter(page.minFilter), filter(page.magFilter), wrap(page.uWrap), wrap(page.vWrap));
  #else
  		Texture2D::TexParams textureParams = {filter(page.minFilter), filter(page.magFilter), wrap(page.uWrap), wrap(page.vWrap)};
  #endif
  		texture->setTexParameters(textureParams);
  
  		page.setRendererObject(texture);
  		page.width = texture->getPixelsWide();
  		page.height = texture->getPixelsHigh();
  	}
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
156
157
  }
  
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
158
159
160
161
  void Cocos2dTextureLoader::unload(void* texture) {
  	if (texture) {
  		((Texture2D*)texture)->release();
  	}
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
162
163
  }
  
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
164
165
166
167
168
169
170
171
  
  Cocos2dExtension::Cocos2dExtension() : DefaultSpineExtension() { }
  
  Cocos2dExtension::~Cocos2dExtension() { }
  
  char *Cocos2dExtension::_readFile(const spine::String &path, int *length) {
  	Data data = FileUtils::getInstance()->getDataFromFile(FileUtils::getInstance()->fullPathForFilename(path.buffer()));
  	if (data.isNull()) return nullptr;
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
172
173
174
175
176
177
178
179
  
  	// avoid buffer overflow (int is shorter than ssize_t in certain platforms)
  #if COCOS2D_VERSION >= 0x00031200
  	ssize_t tmpLen;
  	char *ret = (char*)data.takeBuffer(&tmpLen);
  	*length = static_cast<int>(tmpLen);
  	return ret;
  #else
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
180
181
182
183
  	*length = static_cast<int>(data.getSize());
  	char* bytes = MALLOC(char, *length);
  	memcpy(bytes, data.getBytes(), *length);
  	return bytes;
520389e3   xiaoyu   接入cocos源码,编译未通过,继续修改
184
185
  #endif
  }
5daad4bc   xiaoyu   游戏源码添加编译(现存问题:游戏内...
186
187
188
189
  
  SpineExtension *spine::getDefaultExtension () {
  	return new Cocos2dExtension();
  }