# HG changeset patch # User alfadur # Date 1565810821 -10800 # Node ID fe705efbfc5297b841790b501a014e6833555a87 # Parent 7e3bd4030aa588e6ec00ff3ebdeb823ef638dff9 remove direct libpng dependency on windows diff -r 7e3bd4030aa5 -r fe705efbfc52 CMakeLists.txt --- a/CMakeLists.txt Tue Aug 13 13:20:28 2019 -0600 +++ b/CMakeLists.txt Wed Aug 14 22:27:01 2019 +0300 @@ -20,7 +20,9 @@ #possible cmake configuration option(NOSERVER "Disable gameServer build (off)" OFF) -option(NOPNG "Disable screenshoot compression (off)" OFF) +if(NOT WIN32) + option(NOPNG "Disable screenshoot compression (off)" OFF) +endif() option(NOVIDEOREC "Disable video recording (off)" OFF) #libraries are built shared unless explicitly added as a static diff -r 7e3bd4030aa5 -r fe705efbfc52 hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Tue Aug 13 13:20:28 2019 -0600 +++ b/hedgewars/CMakeLists.txt Wed Aug 14 22:27:01 2019 +0300 @@ -144,13 +144,15 @@ add_definitions(-dUSE_VIDEO_RECORDING) endif() -find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP") -if(PNG_FOUND) - list(INSERT engine_sources 0 PNGh.pas) - list(REMOVE_AT PNG_LIBRARIES 1) #removing the zlib library path - get_filename_component(PNG_LIBRARY_DIR ${PNG_LIBRARIES} PATH) - add_flag_append(CMAKE_Pascal_FLAGS "-k-L${PNG_LIBRARY_DIR} -Fl${PNG_LIBRARY_DIR}") - add_definitions(-dPNG_SCREENSHOTS) +if(NOT WIN32) + find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP") + if(PNG_FOUND) + list(INSERT engine_sources 0 PNGh.pas) + list(REMOVE_AT PNG_LIBRARIES 1) #removing the zlib library path + get_filename_component(PNG_LIBRARY_DIR ${PNG_LIBRARIES} PATH) + add_flag_append(CMAKE_Pascal_FLAGS "-k-L${PNG_LIBRARY_DIR} -Fl${PNG_LIBRARY_DIR}") + add_definitions(-dPNG_SCREENSHOTS) + endif() endif() if(LUA_SYSTEM) diff -r 7e3bd4030aa5 -r fe705efbfc52 hedgewars/SDLh.pas --- a/hedgewars/SDLh.pas Tue Aug 13 13:20:28 2019 -0600 +++ b/hedgewars/SDLh.pas Wed Aug 14 22:27:01 2019 +0300 @@ -1254,6 +1254,7 @@ function IMG_Load_RW(rwop: PSDL_RWops; freesrc: LongBool): PSDL_Surface; cdecl; external SDL_ImageLibName; function IMG_LoadPNG_RW(rwop: PSDL_RWops): PSDL_Surface; cdecl; external SDL_ImageLibName; function IMG_LoadTyped_RW(rwop: PSDL_RWops; freesrc: LongBool; type_: PChar): PSDL_Surface; cdecl; external SDL_ImageLibName; +function IMG_SavePNG(surface: PSDL_Surface; const _file: PChar): LongInt; cdecl; external SDL_ImageLibName; (* SDL_net *) function SDLNet_Init: LongInt; cdecl; external SDL_NetLibName; diff -r 7e3bd4030aa5 -r fe705efbfc52 hedgewars/uMisc.pas --- a/hedgewars/uMisc.pas Tue Aug 13 13:20:28 2019 -0600 +++ b/hedgewars/uMisc.pas Wed Aug 14 22:27:01 2019 +0300 @@ -99,8 +99,41 @@ SaveScreenshot:= 0; end; -{$ELSE} // no PNG_SCREENSHOTS +{$ELSE} //PNG_SCREENSHOTS +{$IFDEF WINDOWS} +function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export; +var + surface: PSDL_Surface; + image: PScreenshot; + mirror: PByte; + row, stride: LongInt; +begin + image:= PScreenshot(screenshot); + mirror:= PByte(GetMem(image^.size)); + stride:= image^.width * 4; + + for row:= 0 to image^.height - 1 do + Move((image^.buffer + row * stride)^, + (mirror + (image^.height - row - 1) * stride)^, + stride); + surface:= SDL_CreateRGBSurfaceFrom( + mirror, + image^.width, image^.height, 32, image^.width * 4, + $000000FF, $0000FF00, $00FF0000, $FF000000); + + if surface <> nil then + begin + IMG_SavePNG(surface, Str2PChar(image^.filename)); + SDL_FreeSurface(surface); + end; + + FreeMem(mirror, image^.size); + FreeMem(image^.buffer, image^.size); + Dispose(image); + SaveScreenshot:= 0; +end; +{$ELSE} //WINDOWS // this funtion will be executed in separate thread function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export; var f: file; @@ -169,7 +202,8 @@ SaveScreenshot:= 0; end; -{$ENDIF} // no PNG_SCREENSHOTS +{$ENDIF} // WINDOWS +{$ENDIF} // PNG_SCREENSHOTS {$IFDEF USE_VIDEO_RECORDING} // make image k times smaller (useful for saving thumbnails) @@ -218,9 +252,14 @@ format:= GL_RGBA; ext:= '.png'; {$ELSE} +{$IFDEF WINDOWS} +format:= GL_RGBA; +ext:= '.png'; +{$ELSE} format:= GL_BGRA; ext:= '.bmp'; {$ENDIF} +{$ENDIF} if dump > 0 then size:= LAND_WIDTH*LAND_HEIGHT*4