mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 09:16:01 +08:00
support premultiplied alpha (#2523)
* Update spine-sdl-cpp.h * Update spine-sdl-cpp.cpp
This commit is contained in:
parent
25d55851e9
commit
4cf43903c8
@ -162,7 +162,8 @@ void SkeletonDrawable::draw(SDL_Renderer *renderer) {
|
||||
for (int ii = 0; ii < (int) indices->size(); ii++)
|
||||
sdlIndices.add((*indices)[ii]);
|
||||
|
||||
switch (slot.getData().getBlendMode()) {
|
||||
if (!usePremultipliedAlpha) {
|
||||
switch (slot.getData().getBlendMode()) {
|
||||
case BlendMode_Normal:
|
||||
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
|
||||
break;
|
||||
@ -175,6 +176,27 @@ void SkeletonDrawable::draw(SDL_Renderer *renderer) {
|
||||
case BlendMode_Screen:
|
||||
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
SDL_BlendMode target;
|
||||
switch (slot.getData().getBlendMode()) {
|
||||
case BlendMode_Normal:
|
||||
target = SDL_ComposeCustomBlendMode(SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD, SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD);
|
||||
SDL_SetTextureBlendMode(texture, target);
|
||||
break;
|
||||
case BlendMode_Multiply:
|
||||
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_MOD);
|
||||
break;
|
||||
case BlendMode_Additive:
|
||||
target = SDL_ComposeCustomBlendMode(SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD, SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE, SDL_BLENDOPERATION_ADD);
|
||||
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_ADD);
|
||||
break;
|
||||
case BlendMode_Screen:
|
||||
target = SDL_ComposeCustomBlendMode(SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD, SDL_BLENDFACTOR_ONE, SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA, SDL_BLENDOPERATION_ADD);
|
||||
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_RenderGeometry(renderer, texture, sdlVertices.buffer(), sdlVertices.size(), sdlIndices.buffer(),
|
||||
|
||||
@ -47,12 +47,16 @@ namespace spine {
|
||||
Skeleton *skeleton;
|
||||
AnimationState *animationState;
|
||||
|
||||
void setUsePremultipliedAlpha(bool usePMA) { usePremultipliedAlpha = usePMA; };
|
||||
bool getUsePremultipliedAlpha() { return usePremultipliedAlpha; };
|
||||
|
||||
private:
|
||||
bool ownsAnimationStateData;
|
||||
SkeletonClipping clipper;
|
||||
Vector<float> worldVertices;
|
||||
Vector<SDL_Vertex> sdlVertices;
|
||||
Vector<int> sdlIndices;
|
||||
bool usePremultipliedAlpha;
|
||||
};
|
||||
|
||||
class SDLTextureLoader : public spine::TextureLoader {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user