mirror of
https://github.com/yann64/haikuports.git
synced 2026-05-03 13:38:52 +02:00
fifechan, fix references to libSDL*, bump version (#3951)
This commit is contained in:
@@ -1,75 +0,0 @@
|
||||
SUMMARY="A C++ GUI library designed for games"
|
||||
DESCRIPTION="Fifechan is a C++ GUI library designed for games. It comes with a \
|
||||
standard set of 'widgets' and can use several different objects for displaying \
|
||||
graphics and capturing user input."
|
||||
HOMEPAGE="http://fifengine.github.com/fifechan/"
|
||||
COPYRIGHT="2004-2014 fifechan developers"
|
||||
LICENSE="GNU LGPL v2.1"
|
||||
REVISION="3"
|
||||
SOURCE_URI="https://github.com/fifengine/fifechan/archive/0.1.2.tar.gz"
|
||||
CHECKSUM_SHA256="4a4239314ae33c5413e4d7d3e5f2f1a7e53fb596fd1480ea7443ee78041e6b2d"
|
||||
SOURCE_FILENAME="$portName-$portVersion.tar.gz"
|
||||
PATCHES="fifechan-$portVersion.patchset"
|
||||
|
||||
ARCHITECTURES="x86 x86_64"
|
||||
SECONDARY_ARCHITECTURES="x86"
|
||||
|
||||
PROVIDES="
|
||||
fifechan$secondaryArchSuffix = $portVersion
|
||||
lib:libfifechan$secondaryArchSuffix = $portVersion
|
||||
lib:libfifechan_opengl$secondaryArchSuffix = $portVersion
|
||||
lib:libfifechan_sdl$secondaryArchSuffix = $portVersion
|
||||
"
|
||||
REQUIRES="
|
||||
haiku$secondaryArchSuffix
|
||||
lib:libgl$secondaryArchSuffix
|
||||
lib:libsdl$secondaryArchSuffix
|
||||
lib:libsdl_image$secondaryArchSuffix
|
||||
"
|
||||
|
||||
PROVIDES_devel="
|
||||
fifechan${secondaryArchSuffix}_devel = $portVersion
|
||||
devel:libfifechan$secondaryArchSuffix = $portVersion
|
||||
devel:libfifechan_opengl$secondaryArchSuffix = $portVersion
|
||||
devel:libfifechan_sdl$secondaryArchSuffix = $portVersion
|
||||
"
|
||||
REQUIRES_devel="
|
||||
fifechan$secondaryArchSuffix == $portVersion base
|
||||
"
|
||||
|
||||
BUILD_REQUIRES="
|
||||
devel:libgl$secondaryArchSuffix
|
||||
devel:libsdl$secondaryArchSuffix
|
||||
devel:libsdl_image$secondaryArchSuffix
|
||||
"
|
||||
BUILD_PREREQUIRES="
|
||||
haiku${secondaryArchSuffix}_devel
|
||||
cmd:cmake
|
||||
cmd:gcc$secondaryArchSuffix
|
||||
cmd:ld$secondaryArchSuffix
|
||||
cmd:make
|
||||
"
|
||||
|
||||
BUILD()
|
||||
{
|
||||
cmake \
|
||||
-DCMAKE_INSTALL_PREFIX=$prefix \
|
||||
-DLIB_INSTALL_DIR=$libDir \
|
||||
-DINCLUDE_INSTALL_DIR=$includeDir \
|
||||
.
|
||||
|
||||
make $jobArgs
|
||||
}
|
||||
|
||||
INSTALL()
|
||||
{
|
||||
make install
|
||||
|
||||
prepareInstalledDevelLibs \
|
||||
libfifechan libfifechan_opengl libfifechan_sdl
|
||||
|
||||
fixPkgconfig
|
||||
|
||||
packageEntries devel \
|
||||
$developDir
|
||||
}
|
||||
@@ -1,406 +0,0 @@
|
||||
From 28d23ce3c076a141f8bb6fe294e408b004c91dc0 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Lotz <mmlr@mlotz.ch>
|
||||
Date: Tue, 13 Oct 2015 22:46:23 +0000
|
||||
Subject: [PATCH 1/5] Add LIB_INSTALL_DIR and INCLUDE_INSTALL_DIR in build
|
||||
system.
|
||||
|
||||
---
|
||||
CMakeLists.txt | 42 ++++++++++++++++++++++--------------------
|
||||
1 file changed, 22 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index c6d638e..7fed177 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -11,6 +11,8 @@ SET(PATCH_LEVEL 2)
|
||||
SET(${PROJECT_NAME}_SOVERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_LEVEL})
|
||||
SET(${PROJECT_NAME}_VERSION ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_LEVEL})
|
||||
SET(LIB_SUFFIX "" CACHE STRING "Suffix to append to the system lib folder")
|
||||
+SET(LIB_INSTALL_DIR lib CACHE STRING "Library install directory")
|
||||
+SET(INCLUDE_INSTALL_DIR include CACHE STRING "Include install directory")
|
||||
|
||||
# set default cmake build type to RelWithDebInfo (None Debug Release RelWithDebInfo MinSizeRel)
|
||||
#IF( NOT CMAKE_BUILD_TYPE )
|
||||
@@ -94,14 +96,14 @@ SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES
|
||||
OUTPUT_NAME ${PROJECT_NAME} # Avoid conflicts between library and binary target names
|
||||
COMPILE_DEFINITIONS "FIFECHAN_BUILD"
|
||||
)
|
||||
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib${LIB_SUFFIX} PERMISSIONS
|
||||
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIB_INSTALL_DIR}${LIB_SUFFIX} PERMISSIONS
|
||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE)
|
||||
-INSTALL(FILES ${FIFECHAN_HEADER} DESTINATION include/)
|
||||
-INSTALL(FILES ${FIFECHAN_HEADERS} DESTINATION include/fifechan/)
|
||||
-INSTALL(FILES ${FIFECHAN_WIDGET_HEADERS} DESTINATION include/fifechan/widgets/)
|
||||
-INSTALL(FILES ${FIFECHAN_CONTRIB_WIDGET_HEADERS} DESTINATION include/fifechan/contrib/widgets/)
|
||||
+INSTALL(FILES ${FIFECHAN_HEADER} DESTINATION ${INCLUDE_INSTALL_DIR})
|
||||
+INSTALL(FILES ${FIFECHAN_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/)
|
||||
+INSTALL(FILES ${FIFECHAN_WIDGET_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/widgets/)
|
||||
+INSTALL(FILES ${FIFECHAN_CONTRIB_WIDGET_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/contrib/widgets/)
|
||||
|
||||
#REMOVE_DEFINITIONS("-DFIFECHAN_BUILD")
|
||||
#ADD_DEFINITIONS("-DFIFECHAN_EXTENSION_BUILD")
|
||||
@@ -147,13 +149,13 @@ IF(ENABLE_ALLEGRO AND ALLEGRO_FOUND)
|
||||
COMPILE_DEFINITIONS "FIFECHAN_EXTENSION_BUILD"
|
||||
)
|
||||
|
||||
- INSTALL(TARGETS ${PROJECT_NAME}_allegro DESTINATION lib${LIB_SUFFIX} PERMISSIONS
|
||||
+ INSTALL(TARGETS ${PROJECT_NAME}_allegro DESTINATION ${LIB_INSTALL_DIR}${LIB_SUFFIX} PERMISSIONS
|
||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE)
|
||||
- INSTALL(FILES ${FIFECHAN_ALLEGRO_HEADER} DESTINATION include/fifechan/)
|
||||
- INSTALL(FILES ${FIFECHAN_ALLEGRO_HEADERS} DESTINATION include/fifechan/allegro/)
|
||||
- INSTALL(FILES ${FIFECHAN_ALLEGRO_CONTRIB_HEADERS} DESTINATION include/fifechan/contrib/allegro/)
|
||||
+ INSTALL(FILES ${FIFECHAN_ALLEGRO_HEADER} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/)
|
||||
+ INSTALL(FILES ${FIFECHAN_ALLEGRO_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/allegro/)
|
||||
+ INSTALL(FILES ${FIFECHAN_ALLEGRO_CONTRIB_HEADERS} DESTINATION i${INCLUDE_INSTALL_DIR}/fifechan/contrib/allegro/)
|
||||
ENDIF(ENABLE_ALLEGRO AND ALLEGRO_FOUND)
|
||||
|
||||
# The Fifechan Irrlicht extension library
|
||||
@@ -194,12 +196,12 @@ IF(ENABLE_IRRLICHT AND IRRLICHT_FOUND)
|
||||
COMPILE_DEFINITIONS "FIFECHAN_EXTENSION_BUILD"
|
||||
)
|
||||
|
||||
- INSTALL(TARGETS ${PROJECT_NAME}_irrlicht DESTINATION lib${LIB_SUFFIX} PERMISSIONS
|
||||
+ INSTALL(TARGETS ${PROJECT_NAME}_irrlicht DESTINATION ${LIB_INSTALL_DIR}${LIB_SUFFIX} PERMISSIONS
|
||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE)
|
||||
- INSTALL(FILES ${FIFECHAN_IRRLICHT_HEADER} DESTINATION include/fifechan/)
|
||||
- INSTALL(FILES ${FIFECHAN_IRRLICHT_HEADERS} DESTINATION include/fifechan/irrlicht/)
|
||||
+ INSTALL(FILES ${FIFECHAN_IRRLICHT_HEADER} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/)
|
||||
+ INSTALL(FILES ${FIFECHAN_IRRLICHT_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/irrlicht/)
|
||||
ENDIF(ENABLE_IRRLICHT AND IRRLICHT_FOUND)
|
||||
|
||||
# The Fifechan OpenGL extension library
|
||||
@@ -274,13 +276,13 @@ IF(ENABLE_OPENGL AND OPENGL_FOUND)
|
||||
COMPILE_DEFINITIONS "FIFECHAN_EXTENSION_BUILD"
|
||||
)
|
||||
|
||||
- INSTALL(TARGETS ${PROJECT_NAME}_opengl DESTINATION lib${LIB_SUFFIX} PERMISSIONS
|
||||
+ INSTALL(TARGETS ${PROJECT_NAME}_opengl DESTINATION ${LIB_INSTALL_DIR}${LIB_SUFFIX} PERMISSIONS
|
||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE)
|
||||
- INSTALL(FILES ${FIFECHAN_OPENGL_HEADER} DESTINATION include/fifechan/)
|
||||
- INSTALL(FILES ${FIFECHAN_OPENGL_HEADERS} DESTINATION include/fifechan/opengl/)
|
||||
- INSTALL(FILES ${FIFECHAN_OPENGL_CONTRIB_HEADERS} DESTINATION include/fifechan/contrib/opengl/)
|
||||
+ INSTALL(FILES ${FIFECHAN_OPENGL_HEADER} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/)
|
||||
+ INSTALL(FILES ${FIFECHAN_OPENGL_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/opengl/)
|
||||
+ INSTALL(FILES ${FIFECHAN_OPENGL_CONTRIB_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/contrib/opengl/)
|
||||
ENDIF(ENABLE_OPENGL AND OPENGL_FOUND)
|
||||
|
||||
# The Fifechan SDL extension library
|
||||
@@ -347,13 +349,13 @@ IF(ENABLE_SDL AND SDL_FOUND AND SDLIMAGE_FOUND)
|
||||
COMPILE_DEFINITIONS "FIFECHAN_EXTENSION_BUILD"
|
||||
)
|
||||
|
||||
- INSTALL(TARGETS ${PROJECT_NAME}_sdl DESTINATION lib${LIB_SUFFIX} PERMISSIONS
|
||||
+ INSTALL(TARGETS ${PROJECT_NAME}_sdl DESTINATION ${LIB_INSTALL_DIR}${LIB_SUFFIX} PERMISSIONS
|
||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||
GROUP_READ GROUP_EXECUTE
|
||||
WORLD_READ WORLD_EXECUTE)
|
||||
- INSTALL(FILES ${FIFECHAN_SDL_HEADER} DESTINATION include/fifechan/)
|
||||
- INSTALL(FILES ${FIFECHAN_SDL_HEADERS} DESTINATION include/fifechan/sdl/)
|
||||
- INSTALL(FILES ${FIFECHAN_SDL_CONTRIB_HEADERS} DESTINATION include/fifechan/contrib/sdl/)
|
||||
+ INSTALL(FILES ${FIFECHAN_SDL_HEADER} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/)
|
||||
+ INSTALL(FILES ${FIFECHAN_SDL_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/sdl/)
|
||||
+ INSTALL(FILES ${FIFECHAN_SDL_CONTRIB_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/fifechan/contrib/sdl/)
|
||||
ENDIF(ENABLE_SDL AND SDL_FOUND AND SDLIMAGE_FOUND)
|
||||
|
||||
# Make uninstall target
|
||||
--
|
||||
2.2.2
|
||||
|
||||
|
||||
From 60abc7fabb4e4e10d3398771c80497f6b0eb4d9b Mon Sep 17 00:00:00 2001
|
||||
From: Michael Lotz <mmlr@mlotz.ch>
|
||||
Date: Sat, 31 Oct 2015 15:38:58 +0000
|
||||
Subject: [PATCH 2/5] Make build system Haiku aware to actually link required
|
||||
libs.
|
||||
|
||||
Previously the libraries didn't actually link to their dependencies.
|
||||
---
|
||||
CMakeLists.txt | 14 ++++++++++----
|
||||
1 file changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 7fed177..7c06c2f 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -210,11 +210,11 @@ OPTION(ENABLE_OPENGL_CONTRIB "Enabled the Fifechan OpenGL Contrib extension" OFF
|
||||
OPTION(BUILD_FIFECHAN_OPENGL_SHARED "Build the Fifechan OpenGL extension library as a shared library." ON)
|
||||
FIND_PACKAGE(OpenGL)
|
||||
|
||||
-IF(APPLE AND ENABLE_OPENGL)
|
||||
+IF((APPLE OR HAIKU) AND ENABLE_OPENGL)
|
||||
FIND_LIBRARY(OPENGL_LIBRARY OpenGL)
|
||||
MARK_AS_ADVANCED(OPENGL_LIBRARY)
|
||||
SET(EXTRA_LIBS ${OPENGL_LIBRARY})
|
||||
-ENDIF(APPLE AND ENABLE_OPENGL)
|
||||
+ENDIF((APPLE OR HAIKU) AND ENABLE_OPENGL)
|
||||
|
||||
IF(ENABLE_OPENGL_CONTRIB)
|
||||
FIND_PACKAGE(OGLFT)
|
||||
@@ -266,6 +266,9 @@ IF(ENABLE_OPENGL AND OPENGL_FOUND)
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME}_opengl ${OPENGL_LIBRARY} ${PROJECT_NAME})
|
||||
ENDIF(ENABLE_OPENGL_CONTRIB AND OpenGL-FT_FOUND)
|
||||
ENDIF(APPLE)
|
||||
+ IF(HAIKU)
|
||||
+ TARGET_LINK_LIBRARIES(${PROJECT_NAME}_opengl ${OPENGL_LIBRARY} ${PROJECT_NAME})
|
||||
+ ENDIF(HAIKU)
|
||||
|
||||
ADD_CUSTOM_TARGET(opengllib DEPENDS ${PROJECT_NAME}_opengl) # Create symlink
|
||||
SET_TARGET_PROPERTIES(${PROJECT_NAME}_opengl PROPERTIES
|
||||
@@ -295,12 +298,12 @@ IF(ENABLE_SDL_CONTRIB)
|
||||
FIND_PACKAGE(SDL_ttf)
|
||||
ENDIF(ENABLE_SDL_CONTRIB)
|
||||
|
||||
-IF(APPLE AND ENABLE_SDL)
|
||||
+IF((APPLE OR HAIKU) AND ENABLE_SDL)
|
||||
FIND_LIBRARY(SDL_LIBRARY SDL)
|
||||
FIND_LIBRARY(SDLIMAGE_LIBRARY SDL_image)
|
||||
MARK_AS_ADVANCED(SDL_LIBRARY SDLIMAGE_LIBRARY)
|
||||
SET(EXTRA_LIBS ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY})
|
||||
-ENDIF(APPLE AND ENABLE_SDL)
|
||||
+ENDIF((APPLE OR HAIKU) AND ENABLE_SDL)
|
||||
IF(ENABLE_SDL AND SDL_FOUND AND SDLIMAGE_FOUND)
|
||||
|
||||
INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR} ${SDLIMAGE_INCLUDE_DIR})
|
||||
@@ -340,6 +343,9 @@ IF(ENABLE_SDL AND SDL_FOUND AND SDLIMAGE_FOUND)
|
||||
IF(APPLE)
|
||||
TARGET_LINK_LIBRARIES(${PROJECT_NAME}_sdl ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} SDLmain ${PROJECT_NAME})
|
||||
ENDIF(APPLE)
|
||||
+ IF(HAIKU)
|
||||
+ TARGET_LINK_LIBRARIES(${PROJECT_NAME}_sdl ${SDL_LIBRARY} ${SDLIMAGE_LIBRARY} ${PROJECT_NAME})
|
||||
+ ENDIF(HAIKU)
|
||||
ADD_CUSTOM_TARGET(sdllib DEPENDS ${PROJECT_NAME}_sdl) # Create symlink
|
||||
SET_TARGET_PROPERTIES(${PROJECT_NAME}_sdl PROPERTIES
|
||||
VERSION ${${PROJECT_NAME}_VERSION}
|
||||
--
|
||||
2.2.2
|
||||
|
||||
|
||||
From 931f7327361a86accb771ce539495fbcff6f2873 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Lotz <mmlr@mlotz.ch>
|
||||
Date: Wed, 28 Oct 2015 02:17:16 +0000
|
||||
Subject: [PATCH 3/5] Fix casting of 16 bit buffer in SDL blending function.
|
||||
|
||||
The buffer was erroneously cast to Uint32 leading to reads past the
|
||||
allocation for the very last pixel.
|
||||
---
|
||||
include/fifechan/sdl/sdlpixel.hpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/fifechan/sdl/sdlpixel.hpp b/include/fifechan/sdl/sdlpixel.hpp
|
||||
index 665d976..5470570 100644
|
||||
--- a/include/fifechan/sdl/sdlpixel.hpp
|
||||
+++ b/include/fifechan/sdl/sdlpixel.hpp
|
||||
@@ -243,7 +243,7 @@ namespace fcn
|
||||
break;
|
||||
|
||||
case 2:
|
||||
- *(Uint16 *)p = SDLAlpha16(pixel, *(Uint32 *)p, color.a, surface->format);
|
||||
+ *(Uint16 *)p = SDLAlpha16(pixel, *(Uint16 *)p, color.a, surface->format);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
--
|
||||
2.2.2
|
||||
|
||||
|
||||
From be2540efa64a2a30095a3e2d09cf676b4265e5f3 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Lotz <mmlr@mlotz.ch>
|
||||
Date: Wed, 28 Oct 2015 02:22:01 +0000
|
||||
Subject: [PATCH 4/5] Avoid needless SDL blending operation for fully opaque
|
||||
pixels.
|
||||
|
||||
This avoids some overhead and truncation artefacts.
|
||||
---
|
||||
include/fifechan/sdl/sdlpixel.hpp | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/include/fifechan/sdl/sdlpixel.hpp b/include/fifechan/sdl/sdlpixel.hpp
|
||||
index 5470570..5332c59 100644
|
||||
--- a/include/fifechan/sdl/sdlpixel.hpp
|
||||
+++ b/include/fifechan/sdl/sdlpixel.hpp
|
||||
@@ -228,6 +228,11 @@ namespace fcn
|
||||
*/
|
||||
inline void SDLputPixelAlpha(SDL_Surface* surface, int x, int y, const Color& color)
|
||||
{
|
||||
+ if (color.a == 255) {
|
||||
+ SDLputPixel(surface, x, y, color);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
int bpp = surface->format->BytesPerPixel;
|
||||
|
||||
SDL_LockSurface(surface);
|
||||
--
|
||||
2.2.2
|
||||
|
||||
|
||||
From a3adac2f041867b02d2dce10cf4cc788f9d46db6 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Lotz <mmlr@mlotz.ch>
|
||||
Date: Sat, 31 Oct 2015 15:21:24 +0000
|
||||
Subject: [PATCH 5/5] Replace individual SDL blending functions with generic
|
||||
ones.
|
||||
|
||||
The base blending formula is changed to the one found in SDL_gfx
|
||||
which produces better output.
|
||||
---
|
||||
include/fifechan/sdl/sdlpixel.hpp | 75 ++++++++++++++++++++-------------------
|
||||
src/sdl/sdlgraphics.cpp | 4 +--
|
||||
2 files changed, 41 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/include/fifechan/sdl/sdlpixel.hpp b/include/fifechan/sdl/sdlpixel.hpp
|
||||
index 5332c59..7232d70 100644
|
||||
--- a/include/fifechan/sdl/sdlpixel.hpp
|
||||
+++ b/include/fifechan/sdl/sdlpixel.hpp
|
||||
@@ -175,35 +175,31 @@ namespace fcn
|
||||
}
|
||||
|
||||
/**
|
||||
- * Blends two 32 bit colors together.
|
||||
+ * Blends two color components together.
|
||||
*
|
||||
- * @param src the source color.
|
||||
- * @param dst the destination color.
|
||||
- * @param a alpha.
|
||||
+ * @param source the source value.
|
||||
+ * @param dest the destination value.
|
||||
+ * @param alpha alpha.
|
||||
*/
|
||||
- inline unsigned int SDLAlpha32(unsigned int src, unsigned int dst, unsigned char a)
|
||||
+ template<typename T>
|
||||
+ inline T SDLBlend(T source, T dest, unsigned char alpha)
|
||||
{
|
||||
- unsigned int b = ((src & 0xff) * a + (dst & 0xff) * (255 - a)) >> 8;
|
||||
- unsigned int g = ((src & 0xff00) * a + (dst & 0xff00) * (255 - a)) >> 8;
|
||||
- unsigned int r = ((src & 0xff0000) * a + (dst & 0xff0000) * (255 - a)) >> 8;
|
||||
-
|
||||
- return (b & 0xff) | (g & 0xff00) | (r & 0xff0000);
|
||||
+ return dest + ((source - dest) * alpha >> 8);
|
||||
}
|
||||
|
||||
/**
|
||||
- * Blends two 16 bit colors together.
|
||||
+ * Blends two colors together.
|
||||
*
|
||||
* @param src the source color.
|
||||
* @param dst the destination color.
|
||||
* @param a alpha.
|
||||
*/
|
||||
- inline unsigned short SDLAlpha16(unsigned short src, unsigned short dst, unsigned char a, const SDL_PixelFormat *f)
|
||||
+ template<typename T>
|
||||
+ inline T SDLBlendColor(T src, T dst, unsigned char alpha, const SDL_PixelFormat *f)
|
||||
{
|
||||
- unsigned int b = ((src & f->Rmask) * a + (dst & f->Rmask) * (255 - a)) >> 8;
|
||||
- unsigned int g = ((src & f->Gmask) * a + (dst & f->Gmask) * (255 - a)) >> 8;
|
||||
- unsigned int r = ((src & f->Bmask) * a + (dst & f->Bmask) * (255 - a)) >> 8;
|
||||
-
|
||||
- return (unsigned short)((b & f->Rmask) | (g & f->Gmask) | (r & f->Bmask));
|
||||
+ return (SDLBlend(src & f->Rmask, dst & f->Rmask, alpha) & f->Rmask)
|
||||
+ | (SDLBlend(src & f->Gmask, dst & f->Gmask, alpha) & f->Gmask)
|
||||
+ | (SDLBlend(src & f->Bmask, dst & f->Bmask, alpha) & f->Bmask);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -239,44 +235,51 @@ namespace fcn
|
||||
|
||||
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
|
||||
|
||||
- Uint32 pixel = SDL_MapRGB(surface->format, color.r, color.g, color.b);
|
||||
-
|
||||
switch(bpp)
|
||||
{
|
||||
case 1:
|
||||
- *p = pixel;
|
||||
+ {
|
||||
+ Uint32 pixel = SDL_MapRGB(surface->format, color.r, color.g, color.b);
|
||||
+
|
||||
+ SDL_Color *colors = surface->format->palette->colors;
|
||||
+ SDL_Color &sourceColor = colors[pixel];
|
||||
+ SDL_Color &destColor = colors[*p];
|
||||
+
|
||||
+ *p = SDL_MapRGB(surface->format,
|
||||
+ SDLBlend(sourceColor.r, destColor.r, color.a),
|
||||
+ SDLBlend(sourceColor.g, destColor.g, color.a),
|
||||
+ SDLBlend(sourceColor.b, destColor.b, color.a));
|
||||
break;
|
||||
+ }
|
||||
|
||||
case 2:
|
||||
- *(Uint16 *)p = SDLAlpha16(pixel, *(Uint16 *)p, color.a, surface->format);
|
||||
+ {
|
||||
+ Uint32 pixel = SDL_MapRGB(surface->format, color.r, color.g, color.b);
|
||||
+ *(Uint16 *)p = SDLBlendColor<Uint16>(pixel, *(Uint16 *)p, color.a, surface->format);
|
||||
break;
|
||||
+ }
|
||||
|
||||
case 3:
|
||||
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
|
||||
{
|
||||
- unsigned int r = (p[0] * (255 - color.a) + color.r * color.a) >> 8;
|
||||
- unsigned int g = (p[1] * (255 - color.a) + color.g * color.a) >> 8;
|
||||
- unsigned int b = (p[2] * (255 - color.a) + color.b * color.a) >> 8;
|
||||
-
|
||||
- p[2] = b;
|
||||
- p[1] = g;
|
||||
- p[0] = r;
|
||||
+ p[0] = SDLBlend<Uint8>(color.r, p[0], color.a);
|
||||
+ p[1] = SDLBlend<Uint8>(color.g, p[1], color.a);
|
||||
+ p[2] = SDLBlend<Uint8>(color.b, p[2], color.a);
|
||||
}
|
||||
else
|
||||
{
|
||||
- unsigned int r = (p[2] * (255 - color.a) + color.r * color.a) >> 8;
|
||||
- unsigned int g = (p[1] * (255 - color.a) + color.g * color.a) >> 8;
|
||||
- unsigned int b = (p[0] * (255 - color.a) + color.b * color.a) >> 8;
|
||||
-
|
||||
- p[0] = b;
|
||||
- p[1] = g;
|
||||
- p[2] = r;
|
||||
+ p[0] = SDLBlend<Uint8>(color.b, p[0], color.a);
|
||||
+ p[1] = SDLBlend<Uint8>(color.g, p[1], color.a);
|
||||
+ p[2] = SDLBlend<Uint8>(color.r, p[2], color.a);
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
- *(Uint32 *)p = SDLAlpha32(pixel, *(Uint32 *)p, color.a);
|
||||
+ {
|
||||
+ Uint32 pixel = SDL_MapRGB(surface->format, color.r, color.g, color.b);
|
||||
+ *(Uint32 *)p = SDLBlendColor<Uint32>(pixel, *(Uint32 *)p, color.a, surface->format);
|
||||
break;
|
||||
+ }
|
||||
}
|
||||
|
||||
SDL_UnlockSurface(surface);
|
||||
diff --git a/src/sdl/sdlgraphics.cpp b/src/sdl/sdlgraphics.cpp
|
||||
index ce135a1..d641271 100644
|
||||
--- a/src/sdl/sdlgraphics.cpp
|
||||
+++ b/src/sdl/sdlgraphics.cpp
|
||||
@@ -364,7 +364,7 @@ namespace fcn
|
||||
{
|
||||
if (mAlpha)
|
||||
{
|
||||
- *q = SDLAlpha32(pixel,*q,mColor.a);
|
||||
+ *q = SDLBlendColor<Uint32>(pixel,*q,mColor.a,mTarget->format);
|
||||
q++;
|
||||
}
|
||||
else
|
||||
@@ -479,7 +479,7 @@ namespace fcn
|
||||
{
|
||||
if (mAlpha)
|
||||
{
|
||||
- *(Uint32*)p = SDLAlpha32(pixel,*(Uint32*)p,mColor.a);
|
||||
+ *(Uint32*)p = SDLBlendColor<Uint32>(pixel,*(Uint32*)p,mColor.a,mTarget->format);
|
||||
}
|
||||
else
|
||||
{
|
||||
--
|
||||
2.2.2
|
||||
|
||||
Reference in New Issue
Block a user