@@ -80,6 +80,7 @@ configure() | |||||
BUILDFLAGS= | BUILDFLAGS= | ||||
fi | fi | ||||
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$PWD/contrib/gtkglarea-2.0.1/lib/pkgconfig" | PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$PWD/contrib/gtkglarea-2.0.1/lib/pkgconfig" | ||||
LDFLAGS="$LDFLAGS -L$PWD/contrib/gdiplus/lib" | |||||
LDFLAGS="$LDFLAGS -L$PWD/contrib/glew-1.7.0/lib/i686-w64-mingw32" | LDFLAGS="$LDFLAGS -L$PWD/contrib/glew-1.7.0/lib/i686-w64-mingw32" | ||||
LDFLAGS="$LDFLAGS -L$PWD/contrib/sdl-1.2.14/lib/i686-w64-mingw32" | LDFLAGS="$LDFLAGS -L$PWD/contrib/sdl-1.2.14/lib/i686-w64-mingw32" | ||||
LDFLAGS="$LDFLAGS -L$PWD/contrib/sdl-image-1.2.10/lib/i686-w64-mingw32" | LDFLAGS="$LDFLAGS -L$PWD/contrib/sdl-image-1.2.10/lib/i686-w64-mingw32" | ||||
@@ -121,6 +122,7 @@ configure() | |||||
PATH="$PATH" ./configure CXX=ppu-lv2-g++ CC=ppu-lv2-gcc ac_cv_exeext=.elf --host=none | PATH="$PATH" ./configure CXX=ppu-lv2-g++ CC=ppu-lv2-gcc ac_cv_exeext=.elf --host=none | ||||
;; | ;; | ||||
windows-i386|windows-amd64) | windows-i386|windows-amd64) | ||||
CPPFLAGS="$CPPFLAGS -I$PWD/contrib/gdiplus/include" | |||||
CPPFLAGS="$CPPFLAGS -I$PWD/contrib/sdl-1.2.14/include" | CPPFLAGS="$CPPFLAGS -I$PWD/contrib/sdl-1.2.14/include" | ||||
CPPFLAGS="$CPPFLAGS -I$PWD/contrib/sdl-image-1.2.10/include" | CPPFLAGS="$CPPFLAGS -I$PWD/contrib/sdl-image-1.2.10/include" | ||||
CPPFLAGS="$CPPFLAGS -I$PWD/contrib/sdl-mixer-1.2.11/include" | CPPFLAGS="$CPPFLAGS -I$PWD/contrib/sdl-mixer-1.2.11/include" | ||||
@@ -263,6 +263,24 @@ fi | |||||
AM_CONDITIONAL(USE_LIBPNG, test "${ac_cv_my_have_libpng}" != "no") | AM_CONDITIONAL(USE_LIBPNG, test "${ac_cv_my_have_libpng}" != "no") | ||||
dnl Use Windows GDI+? | |||||
ac_cv_my_have_gdiplus="no" | |||||
AC_LANG_PUSH(C++) | |||||
AC_CHECK_HEADERS(Gdiplus.h, | |||||
[ac_cv_my_have_gdiplus="yes" | |||||
LOL_LIBS="${LOL_LIBS} -lgdiplus"], | |||||
[ac_cv_my_have_gdiplus="no"], | |||||
[#include <algorithm> | |||||
using std::min; | |||||
using std::max; | |||||
#include <windows.h>]) | |||||
AC_LANG_POP(C++) | |||||
if test "${ac_cv_my_have_gdiplus}" != "no"; then | |||||
AC_DEFINE(USE_GDIPLUS, 1, Define to 1 to use GDI+) | |||||
fi | |||||
AM_CONDITIONAL(USE_GDIPLUS, test "${ac_cv_my_have_gdiplus}" = "yes") | |||||
dnl Use libcaca? (required for font generation) | dnl Use libcaca? (required for font generation) | ||||
ac_cv_my_have_caca="no" | ac_cv_my_have_caca="no" | ||||
PKG_CHECK_MODULES(CACA, caca >= 0.99.beta17, [ac_cv_my_have_caca="yes"], [:]) | PKG_CHECK_MODULES(CACA, caca >= 0.99.beta17, [ac_cv_my_have_caca="yes"], [:]) | ||||
@@ -27,6 +27,7 @@ liblol_a_SOURCES = \ | |||||
\ | \ | ||||
image/image.cpp image/image.h image/image-private.h \ | image/image.cpp image/image.h image/image-private.h \ | ||||
image/codec/android-image.cpp \ | image/codec/android-image.cpp \ | ||||
image/codec/gdiplus-image.cpp \ | |||||
image/codec/ios-image.cpp \ | image/codec/ios-image.cpp \ | ||||
image/codec/sdl-image.cpp \ | image/codec/sdl-image.cpp \ | ||||
image/codec/ps3-image.cpp \ | image/codec/ps3-image.cpp \ | ||||
@@ -0,0 +1,117 @@ | |||||
// | |||||
// Lol Engine | |||||
// | |||||
// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net> | |||||
// This program is free software; you can redistribute it and/or | |||||
// modify it under the terms of the Do What The Fuck You Want To | |||||
// Public License, Version 2, as published by Sam Hocevar. See | |||||
// http://sam.zoy.org/projects/COPYING.WTFPL for more details. | |||||
// | |||||
#if defined HAVE_CONFIG_H | |||||
# include "config.h" | |||||
#endif | |||||
#if defined USE_GDIPLUS | |||||
#include <cmath> | |||||
#include <algorithm> | |||||
using namespace std; | |||||
#include <windows.h> | |||||
#include <Gdiplus.h> | |||||
#include "core.h" | |||||
#include "../../image/image-private.h" | |||||
namespace lol | |||||
{ | |||||
/* | |||||
* Image implementation class | |||||
*/ | |||||
DECLARE_IMAGE_LOADER(GdiPlusImageData, 100) | |||||
{ | |||||
public: | |||||
virtual bool Open(char const *); | |||||
virtual bool Close(); | |||||
virtual void *GetData() const; | |||||
private: | |||||
Gdiplus::Bitmap *bitmap; | |||||
Gdiplus::BitmapData bdata; | |||||
}; | |||||
/* | |||||
* Public Image class | |||||
*/ | |||||
bool GdiPlusImageData::Open(char const *path) | |||||
{ | |||||
size_t len; | |||||
len = mbstowcs(NULL, path, 0); | |||||
wchar_t *wpath = new wchar_t[len + 1]; | |||||
if (mbstowcs(wpath, path, len + 1) == (size_t)-1) | |||||
{ | |||||
#if !LOL_RELEASE | |||||
Log::Error("invalid image name %s\n", path); | |||||
#endif | |||||
delete[] wpath; | |||||
return false; | |||||
} | |||||
ULONG_PTR token; | |||||
Gdiplus::GdiplusStartupInput input; | |||||
Gdiplus::GdiplusStartup(&token, &input, NULL); | |||||
for (wchar_t const *wname = wpath; *wname; wname++) | |||||
if ((bitmap = Gdiplus::Bitmap::FromFile(wname, 0))) | |||||
break; | |||||
delete[] wpath; | |||||
if (!bitmap) | |||||
{ | |||||
#if !LOL_RELEASE | |||||
Log::Error("could not load %s\n", path); | |||||
#endif | |||||
return false; | |||||
} | |||||
size = ivec2(bitmap->GetWidth(), bitmap->GetHeight()); | |||||
format = Image::FORMAT_RGBA; | |||||
Gdiplus::Rect rect(0, 0, size.x, size.y); | |||||
if(bitmap->LockBits(&rect, Gdiplus::ImageLockModeRead, | |||||
PixelFormat32bppARGB, &bdata) != Gdiplus::Ok) | |||||
{ | |||||
#if !LOL_RELEASE | |||||
Log::Error("could not lock bits in %s\n", path); | |||||
#endif | |||||
delete bitmap; | |||||
return false; | |||||
} | |||||
return true; | |||||
} | |||||
bool GdiPlusImageData::Close() | |||||
{ | |||||
bitmap->UnlockBits(&bdata); | |||||
delete bitmap; | |||||
return true; | |||||
} | |||||
void * GdiPlusImageData::GetData() const | |||||
{ | |||||
return bdata.Scan0; | |||||
} | |||||
} /* namespace lol */ | |||||
#endif /* defined USE_GDIPLUS */ | |||||
@@ -28,6 +28,9 @@ bool ImageLoader::RegisterAllLoaders() | |||||
REGISTER_IMAGE_LOADER(AndroidImageData) | REGISTER_IMAGE_LOADER(AndroidImageData) | ||||
#endif | #endif | ||||
REGISTER_IMAGE_LOADER(DummyImageData) | REGISTER_IMAGE_LOADER(DummyImageData) | ||||
#if defined USE_GDIPLUS | |||||
REGISTER_IMAGE_LOADER(GdiPlusImageData) | |||||
#endif | |||||
#if defined __APPLE__ && defined __MACH__ && defined __arm__ | #if defined __APPLE__ && defined __MACH__ && defined __arm__ | ||||
REGISTER_IMAGE_LOADER(IosImageData) | REGISTER_IMAGE_LOADER(IosImageData) | ||||
#endif | #endif | ||||