| @@ -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 | ||||