127 lines
5.0 KiB
Go
127 lines
5.0 KiB
Go
package sdl
|
|
|
|
/*
|
|
#include "sdl_wrapper.h"
|
|
|
|
#if !(SDL_VERSION_ATLEAST(2,0,6))
|
|
|
|
|
|
#if defined(WARN_OUTDATED)
|
|
#pragma message("SDL_BLENDMODE_INVALID is not supported before SDL 2.0.6")
|
|
#endif
|
|
|
|
#define SDL_BLENDMODE_INVALID (0x7FFFFFFF)
|
|
|
|
|
|
#if defined(WARN_OUTDATED)
|
|
#pragma message("SDL_BlendOperation is not supported before SDL 2.0.6")
|
|
#endif
|
|
|
|
typedef enum
|
|
{
|
|
SDL_BLENDOPERATION_ADD = 0x1,
|
|
SDL_BLENDOPERATION_SUBTRACT = 0x2,
|
|
SDL_BLENDOPERATION_REV_SUBTRACT = 0x3,
|
|
SDL_BLENDOPERATION_MINIMUM = 0x4,
|
|
SDL_BLENDOPERATION_MAXIMUM = 0x5
|
|
} SDL_BlendOperation;
|
|
|
|
|
|
#if defined(WARN_OUTDATED)
|
|
#pragma message("SDL_BlendFactor is not supported before SDL 2.0.6")
|
|
#endif
|
|
|
|
typedef enum
|
|
{
|
|
SDL_BLENDFACTOR_ZERO = 0x1,
|
|
SDL_BLENDFACTOR_ONE = 0x2,
|
|
SDL_BLENDFACTOR_SRC_COLOR = 0x3,
|
|
SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4,
|
|
SDL_BLENDFACTOR_SRC_ALPHA = 0x5,
|
|
SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6,
|
|
SDL_BLENDFACTOR_DST_COLOR = 0x7,
|
|
SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8,
|
|
SDL_BLENDFACTOR_DST_ALPHA = 0x9,
|
|
SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA
|
|
|
|
} SDL_BlendFactor;
|
|
|
|
|
|
#if defined(WARN_OUTDATED)
|
|
#pragma message("SDL_ComposeCustomBlendMode is not supported before SDL 2.0.6")
|
|
#endif
|
|
|
|
SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, SDL_BlendFactor dstColorFactor, SDL_BlendOperation colorOperation, SDL_BlendFactor srcAlphaFactor, SDL_BlendFactor dstAlphaFactor, SDL_BlendOperation alphaOperation)
|
|
{
|
|
return SDL_BLENDMODE_NONE;
|
|
}
|
|
#endif
|
|
*/
|
|
import "C"
|
|
import "unsafe"
|
|
|
|
// BlendMode is an enumeration of blend modes used in Render.Copy() and drawing operations.
|
|
// (https://wiki.libsdl.org/SDL_BlendMode)
|
|
type BlendMode uint32
|
|
|
|
const (
|
|
BLENDMODE_NONE = C.SDL_BLENDMODE_NONE // no blending
|
|
BLENDMODE_BLEND = C.SDL_BLENDMODE_BLEND // alpha blending
|
|
BLENDMODE_ADD = C.SDL_BLENDMODE_ADD // additive blending
|
|
BLENDMODE_MOD = C.SDL_BLENDMODE_MOD // color modulate
|
|
BLENDMODE_INVALID = C.SDL_BLENDMODE_INVALID
|
|
)
|
|
|
|
func (bm BlendMode) c() C.SDL_BlendMode {
|
|
return C.SDL_BlendMode(C.Uint32(bm))
|
|
}
|
|
|
|
func (bm *BlendMode) cptr() *C.SDL_BlendMode {
|
|
return (*C.SDL_BlendMode)(unsafe.Pointer(bm))
|
|
}
|
|
|
|
// BlendOperation is an enumeration of blend operations used when creating a custom blend mode with ComposeCustomBlendMode().
|
|
// (https://wiki.libsdl.org/SDL_BlendOperation)
|
|
type BlendOperation C.SDL_BlendOperation
|
|
|
|
const (
|
|
BLENDOPERATION_ADD = C.SDL_BLENDOPERATION_ADD
|
|
BLENDOPERATION_SUBTRACT = C.SDL_BLENDOPERATION_SUBTRACT
|
|
BLENDOPERATION_REV_SUBTRACT = C.SDL_BLENDOPERATION_REV_SUBTRACT
|
|
BLENDOPERATION_MINIMUM = C.SDL_BLENDOPERATION_MINIMUM
|
|
BLENDOPERATION_MAXIMUM = C.SDL_BLENDOPERATION_MAXIMUM
|
|
)
|
|
|
|
// BlendFactor is an enumeration of blend factors used when creating a custom blend mode with ComposeCustomBlendMode().
|
|
// (https://wiki.libsdl.org/SDL_BlendFactor)
|
|
type BlendFactor C.SDL_BlendFactor
|
|
|
|
const (
|
|
BLENDFACTOR_ZERO = C.SDL_BLENDFACTOR_ZERO // 0, 0, 0, 0
|
|
BLENDFACTOR_ONE = C.SDL_BLENDFACTOR_ONE // 1, 1, 1, 1
|
|
BLENDFACTOR_SRC_COLOR = C.SDL_BLENDFACTOR_SRC_COLOR // srcR, srcG, srcB, srcA
|
|
BLENDFACTOR_ONE_MINUS_SRC_COLOR = C.SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR // 1-srcR, 1-srcG, 1-srcB, 1-srcA
|
|
BLENDFACTOR_SRC_ALPHA = C.SDL_BLENDFACTOR_SRC_ALPHA // srcA, srcA, srcA, srcA
|
|
BLENDFACTOR_ONE_MINUS_SRC_ALPHA = C.SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA // 1-srcA, 1-srcA, 1-srcA, 1-srcA
|
|
BLENDFACTOR_DST_COLOR = C.SDL_BLENDFACTOR_DST_COLOR // dstR, dstG, dstB, dstA
|
|
BLENDFACTOR_ONE_MINUS_DST_COLOR = C.SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR // 1-dstR, 1-dstG, 1-dstB, 1-dstA
|
|
BLENDFACTOR_DST_ALPHA = C.SDL_BLENDFACTOR_DST_ALPHA // dstA, dstA, dstA, dstA
|
|
BLENDFACTOR_ONE_MINUS_DST_ALPHA = C.SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA // 1-dstA, 1-dstA, 1-dstA, 1-dstA
|
|
)
|
|
|
|
// ComposeCustomBlendMode creates a custom blend mode, which may or may not be supported by a given renderer
|
|
// The result of the blend mode operation will be:
|
|
// dstRGB = dstRGB * dstColorFactor colorOperation srcRGB * srcColorFactor
|
|
// and
|
|
// dstA = dstA * dstAlphaFactor alphaOperation srcA * srcAlphaFactor
|
|
// (https://wiki.libsdl.org/SDL_ComposeCustomBlendMode)
|
|
func ComposeCustomBlendMode(srcColorFactor, dstColorFactor BlendFactor, colorOperation BlendOperation, srcAlphaFactor, dstAlphaFactor BlendFactor, alphaOperation BlendOperation) BlendMode {
|
|
_srcColorFactor := C.SDL_BlendFactor(srcColorFactor)
|
|
_dstColorFactor := C.SDL_BlendFactor(dstColorFactor)
|
|
_colorOperation := C.SDL_BlendOperation(colorOperation)
|
|
_srcAlphaFactor := C.SDL_BlendFactor(srcAlphaFactor)
|
|
_dstAlphaFactor := C.SDL_BlendFactor(dstAlphaFactor)
|
|
_alphaOperation := C.SDL_BlendOperation(alphaOperation)
|
|
return BlendMode(C.SDL_ComposeCustomBlendMode(_srcColorFactor, _dstColorFactor, _colorOperation, _srcAlphaFactor, _dstAlphaFactor, _alphaOperation))
|
|
}
|