mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-04 14:24:53 +08:00
* Add `spine-iOS` SPM package & example app (#1) * Basic Mesh Rendering (#2) * Spine C++ Swift Wrapper (#3) * Load `Atlas` & `SkeletonData` (#4) Load & dispose `Atlas` & `SkeletonData` from bundled files. * Generate Swift classes from `spine-cpp-lite.h` (#5) * Draw `SkeletonData` render commands (#6) - Use `SkeletonData` render commands in the renderer - Simple loop for animation support * Add `BoundsProvider` (#7) - Implement & support `BoundsProvider` classes - Introduce alignment and content mode - Update c to swift script to return optional for find prefixed methods * Support `SpineController` & `Event` callbacks (#8) - Support SpineController callbacks - Support Event callbacks - Apply tint color in renderer * Support `DressUp` sample (#9) - Add `DressUp` sample - Move SpineViewController to SpineUIView - Implement SpineUIView export to image * Remove unused file * Add `Physics` sample (#10) - Add `Physics` sample - Fix offsets in `IKFollowing` sample - Fix `SpineView` background color * Add `DebugRendering` sample (#11) - Add `DebugRendering` sample - Make `SpineUIView` transparent * Move remaining files to SPM package (#12) - Move remaining files to SPM package - Rename `SpineWrapper` to `SpineCppLite` * Load assets from different sources (#13) - Load from bundle, file, http & drawable - Apply correct blend mode & pma in renderer * Add `Obj-C` + `UIKit` sample (#14) - Add `Obj-C` + `UIKit` sample - Update `Spine` to be usable in Obj-C code base * Support CocoaPods (#15) * Metal Best Practices (#16) - Tripple Buffering - Buffer Bindings - Shared Objects * Annotate functions that should return optional (#17) * Add option to disable drawing when out of viewport (#18) - Add option to disable drawing when out of viewport - Move update clock to controller so multiple views can share it * Add docs for public Spine classes/methods (#19) * Fix various regressions (#20) - Fix retain `SpineController` retain cycle - Fix issue wehre images were not rendered
71 lines
2.0 KiB
Metal
71 lines
2.0 KiB
Metal
#include <metal_stdlib>
|
|
|
|
using namespace metal;
|
|
|
|
typedef enum SpineVertexInputIndex {
|
|
SpineVertexInputIndexVertices = 0,
|
|
SpineVertexInputIndexTransform = 1,
|
|
SpineVertexInputIndexViewportSize = 2,
|
|
} SpineVertexInputIndex;
|
|
|
|
typedef enum SpineTextureIndex {
|
|
SpineTextureIndexBaseColor = 0,
|
|
} SpineTextureIndex;
|
|
|
|
typedef struct {
|
|
vector_float2 position;
|
|
vector_float4 color;
|
|
vector_float2 uv;
|
|
} SpineVertex;
|
|
|
|
typedef struct {
|
|
vector_float2 translation;
|
|
vector_float2 scale;
|
|
vector_float2 offset;
|
|
} SpineTransform;
|
|
|
|
struct RasterizerData {
|
|
float4 position [[position]];
|
|
float4 color;
|
|
float2 textureCoordinate;
|
|
};
|
|
|
|
vertex RasterizerData
|
|
vertexShader(uint vertexID [[vertex_id]],
|
|
constant SpineVertex *vertices [[buffer(SpineVertexInputIndexVertices)]],
|
|
constant SpineTransform *transform [[buffer(SpineVertexInputIndexTransform)]],
|
|
constant vector_uint2 *viewportSizePointer [[buffer(SpineVertexInputIndexViewportSize)]])
|
|
{
|
|
RasterizerData out;
|
|
|
|
float2 pixelSpacePosition = vertices[vertexID].position.xy;
|
|
|
|
vector_float2 viewportSize = vector_float2(*viewportSizePointer);
|
|
|
|
out.position = vector_float4(0.0, 0.0, 0.0, 1.0);
|
|
|
|
out.position.xy = pixelSpacePosition;
|
|
out.position.xy *= transform->scale;
|
|
out.position.xy += transform->translation * transform->scale + transform->offset;
|
|
out.position.xy /= viewportSize / 2;
|
|
out.position.y *= -1;
|
|
|
|
out.color = vertices[vertexID].color;
|
|
|
|
out.textureCoordinate = vertices[vertexID].uv;
|
|
|
|
return out;
|
|
}
|
|
|
|
fragment float4
|
|
fragmentShader(RasterizerData in [[stage_in]],
|
|
texture2d<half> colorTexture [[ texture(SpineTextureIndexBaseColor) ]])
|
|
{
|
|
constexpr sampler textureSampler (mag_filter::nearest,
|
|
min_filter::nearest);
|
|
|
|
const half4 colorSample = colorTexture.sample(textureSampler, in.textureCoordinate);
|
|
|
|
return float4(colorSample) * in.color;
|
|
}
|