diff --git a/VisualC/SDL/SDL_VS2008.vcproj b/VisualC/SDL/SDL_VS2008.vcproj
index e1725b197..1cc108e40 100644
--- a/VisualC/SDL/SDL_VS2008.vcproj
+++ b/VisualC/SDL/SDL_VS2008.vcproj
@@ -642,14 +642,6 @@
RelativePath="..\..\src\SDL.c"
>
-
-
-
-
@@ -687,19 +679,27 @@
>
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1010,6 +1026,10 @@
RelativePath="..\..\src\render\software\SDL_renderer_sw.c"
>
+
+
diff --git a/VisualC/SDL/SDL_VS2010.vcxproj b/VisualC/SDL/SDL_VS2010.vcxproj
index cf43f689d..279bce7e2 100644
--- a/VisualC/SDL/SDL_VS2010.vcxproj
+++ b/VisualC/SDL/SDL_VS2010.vcxproj
@@ -285,10 +285,17 @@ echo #define SDL_REVISION "hg-0:baadf00d" >"$(ProjectDir)\..\..\include\SDL_r
-
+
+
+
+
+
+
+
+
@@ -296,7 +303,6 @@ echo #define SDL_REVISION "hg-0:baadf00d" >"$(ProjectDir)\..\..\include\SDL_r
-
@@ -367,9 +373,13 @@ echo #define SDL_REVISION "hg-0:baadf00d" >"$(ProjectDir)\..\..\include\SDL_r
+
+
+
+
+
-
@@ -377,10 +387,7 @@ echo #define SDL_REVISION "hg-0:baadf00d" >"$(ProjectDir)\..\..\include\SDL_r
-
-
-
-
+
@@ -396,9 +403,6 @@ echo #define SDL_REVISION "hg-0:baadf00d" >"$(ProjectDir)\..\..\include\SDL_r
-
-
-
diff --git a/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj b/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj
index bc3ce005a..e8db07371 100755
--- a/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj
+++ b/Xcode-iPhoneOS/SDL/SDLiPhoneOS.xcodeproj/project.pbxproj
@@ -69,10 +69,6 @@
041B2CF312FA0F680087D585 /* SDL_renderer_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 041B2CED12FA0F680087D585 /* SDL_renderer_sw.c */; };
0420497011E6F03D007E7EC9 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 0420496E11E6F03D007E7EC9 /* SDL_clipboardevents_c.h */; };
0420497111E6F03D007E7EC9 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 0420496F11E6F03D007E7EC9 /* SDL_clipboardevents.c */; };
- 043DD76F10FD8A0000DED673 /* SDL_alphamult.c in Sources */ = {isa = PBXBuildFile; fileRef = 043DD76B10FD8A0000DED673 /* SDL_alphamult.c */; };
- 043DD77010FD8A0000DED673 /* SDL_alphamult.h in Headers */ = {isa = PBXBuildFile; fileRef = 043DD76C10FD8A0000DED673 /* SDL_alphamult.h */; };
- 043DD77110FD8A0000DED673 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 043DD76D10FD8A0000DED673 /* SDL_blendfillrect.c */; };
- 043DD77210FD8A0000DED673 /* SDL_drawrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 043DD76E10FD8A0000DED673 /* SDL_drawrect.c */; };
04409BA612FA989600FB9AA8 /* mmx.h in Headers */ = {isa = PBXBuildFile; fileRef = 04409BA212FA989600FB9AA8 /* mmx.h */; };
04409BA712FA989600FB9AA8 /* SDL_yuv_mmx.c in Sources */ = {isa = PBXBuildFile; fileRef = 04409BA312FA989600FB9AA8 /* SDL_yuv_mmx.c */; };
04409BA812FA989600FB9AA8 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04409BA412FA989600FB9AA8 /* SDL_yuv_sw_c.h */; };
@@ -81,13 +77,7 @@
044E5FB511E6069F0076F181 /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = 044E5FB311E6069F0076F181 /* SDL_clipboard.h */; settings = {ATTRIBUTES = (Public, ); }; };
044E5FB611E6069F0076F181 /* SDL_input.h in Headers */ = {isa = PBXBuildFile; fileRef = 044E5FB411E6069F0076F181 /* SDL_input.h */; settings = {ATTRIBUTES = (Public, ); }; };
044E5FB811E606EB0076F181 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 044E5FB711E606EB0076F181 /* SDL_clipboard.c */; };
- 0463873F0F0B5B7D0041FD65 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 046387370F0B5B7D0041FD65 /* SDL_blendline.c */; };
- 046387400F0B5B7D0041FD65 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 046387380F0B5B7D0041FD65 /* SDL_blendpoint.c */; };
- 046387410F0B5B7D0041FD65 /* SDL_blendrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 046387390F0B5B7D0041FD65 /* SDL_blendrect.c */; };
046387420F0B5B7D0041FD65 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = 0463873A0F0B5B7D0041FD65 /* SDL_blit_slow.h */; };
- 046387430F0B5B7D0041FD65 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 0463873B0F0B5B7D0041FD65 /* SDL_draw.h */; };
- 046387440F0B5B7D0041FD65 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 0463873C0F0B5B7D0041FD65 /* SDL_drawline.c */; };
- 046387450F0B5B7D0041FD65 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 0463873D0F0B5B7D0041FD65 /* SDL_drawpoint.c */; };
046387460F0B5B7D0041FD65 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 0463873E0F0B5B7D0041FD65 /* SDL_fillrect.c */; };
047677BB0EA76A31008ABAF1 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 047677B80EA76A31008ABAF1 /* SDL_syshaptic.c */; };
047677BC0EA76A31008ABAF1 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 047677B90EA76A31008ABAF1 /* SDL_haptic.c */; };
@@ -108,6 +98,20 @@
04EC8B521025D12900431D42 /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = 04EC8B501025D12900431D42 /* SDL_config_iphoneos.h */; settings = {ATTRIBUTES = (Public, ); }; };
04F2AF541104ABC300D6DDF7 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F2AF531104ABC300D6DDF7 /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
04F2AF561104ABD200D6DDF7 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F2AF551104ABD200D6DDF7 /* SDL_assert.c */; };
+ 04F7807612FB751400FC43C0 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7806A12FB751400FC43C0 /* SDL_blendfillrect.c */; };
+ 04F7807712FB751400FC43C0 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7806B12FB751400FC43C0 /* SDL_blendfillrect.h */; };
+ 04F7807812FB751400FC43C0 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7806C12FB751400FC43C0 /* SDL_blendline.c */; };
+ 04F7807912FB751400FC43C0 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7806D12FB751400FC43C0 /* SDL_blendline.h */; };
+ 04F7807A12FB751400FC43C0 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7806E12FB751400FC43C0 /* SDL_blendpoint.c */; };
+ 04F7807B12FB751400FC43C0 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7806F12FB751400FC43C0 /* SDL_blendpoint.h */; };
+ 04F7807C12FB751400FC43C0 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7807012FB751400FC43C0 /* SDL_draw.h */; };
+ 04F7807D12FB751400FC43C0 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7807112FB751400FC43C0 /* SDL_drawline.c */; };
+ 04F7807E12FB751400FC43C0 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7807212FB751400FC43C0 /* SDL_drawline.h */; };
+ 04F7807F12FB751400FC43C0 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7807312FB751400FC43C0 /* SDL_drawpoint.c */; };
+ 04F7808012FB751400FC43C0 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7807412FB751400FC43C0 /* SDL_drawpoint.h */; };
+ 04F7808112FB751400FC43C0 /* SDL_renderer_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7807512FB751400FC43C0 /* SDL_renderer_sw_c.h */; };
+ 04F7808412FB753F00FC43C0 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7808212FB753F00FC43C0 /* SDL_nullframebuffer_c.h */; };
+ 04F7808512FB753F00FC43C0 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7808312FB753F00FC43C0 /* SDL_nullframebuffer.c */; };
04FFAB8B12E23B8D00BA343D /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04FFAB8912E23B8D00BA343D /* SDL_atomic.c */; };
04FFAB8C12E23B8D00BA343D /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 04FFAB8A12E23B8D00BA343D /* SDL_spinlock.c */; };
04FFAB9612E23BDC00BA343D /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = 04FFAB9312E23BDC00BA343D /* SDL_blendmode.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -325,10 +329,6 @@
041B2CED12FA0F680087D585 /* SDL_renderer_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_renderer_sw.c; sourceTree = ""; };
0420496E11E6F03D007E7EC9 /* SDL_clipboardevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_clipboardevents_c.h; sourceTree = ""; };
0420496F11E6F03D007E7EC9 /* SDL_clipboardevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboardevents.c; sourceTree = ""; };
- 043DD76B10FD8A0000DED673 /* SDL_alphamult.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_alphamult.c; sourceTree = ""; };
- 043DD76C10FD8A0000DED673 /* SDL_alphamult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_alphamult.h; sourceTree = ""; };
- 043DD76D10FD8A0000DED673 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = ""; };
- 043DD76E10FD8A0000DED673 /* SDL_drawrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawrect.c; sourceTree = ""; };
04409BA212FA989600FB9AA8 /* mmx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mmx.h; sourceTree = ""; };
04409BA312FA989600FB9AA8 /* SDL_yuv_mmx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv_mmx.c; sourceTree = ""; };
04409BA412FA989600FB9AA8 /* SDL_yuv_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_yuv_sw_c.h; sourceTree = ""; };
@@ -337,13 +337,7 @@
044E5FB311E6069F0076F181 /* SDL_clipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_clipboard.h; path = ../../include/SDL_clipboard.h; sourceTree = SOURCE_ROOT; };
044E5FB411E6069F0076F181 /* SDL_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_input.h; path = ../../include/SDL_input.h; sourceTree = SOURCE_ROOT; };
044E5FB711E606EB0076F181 /* SDL_clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboard.c; sourceTree = ""; };
- 046387370F0B5B7D0041FD65 /* SDL_blendline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendline.c; sourceTree = ""; };
- 046387380F0B5B7D0041FD65 /* SDL_blendpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendpoint.c; sourceTree = ""; };
- 046387390F0B5B7D0041FD65 /* SDL_blendrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendrect.c; sourceTree = ""; };
0463873A0F0B5B7D0041FD65 /* SDL_blit_slow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_slow.h; sourceTree = ""; };
- 0463873B0F0B5B7D0041FD65 /* SDL_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_draw.h; sourceTree = ""; };
- 0463873C0F0B5B7D0041FD65 /* SDL_drawline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawline.c; sourceTree = ""; };
- 0463873D0F0B5B7D0041FD65 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = ""; };
0463873E0F0B5B7D0041FD65 /* SDL_fillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_fillrect.c; sourceTree = ""; };
047677B80EA76A31008ABAF1 /* SDL_syshaptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syshaptic.c; sourceTree = ""; };
047677B90EA76A31008ABAF1 /* SDL_haptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_haptic.c; path = ../../src/haptic/SDL_haptic.c; sourceTree = SOURCE_ROOT; };
@@ -364,6 +358,20 @@
04EC8B501025D12900431D42 /* SDL_config_iphoneos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_config_iphoneos.h; path = ../../include/SDL_config_iphoneos.h; sourceTree = SOURCE_ROOT; };
04F2AF531104ABC300D6DDF7 /* SDL_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_assert.h; path = ../../include/SDL_assert.h; sourceTree = SOURCE_ROOT; };
04F2AF551104ABD200D6DDF7 /* SDL_assert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_assert.c; path = ../../src/SDL_assert.c; sourceTree = SOURCE_ROOT; };
+ 04F7806A12FB751400FC43C0 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = ""; };
+ 04F7806B12FB751400FC43C0 /* SDL_blendfillrect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendfillrect.h; sourceTree = ""; };
+ 04F7806C12FB751400FC43C0 /* SDL_blendline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendline.c; sourceTree = ""; };
+ 04F7806D12FB751400FC43C0 /* SDL_blendline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendline.h; sourceTree = ""; };
+ 04F7806E12FB751400FC43C0 /* SDL_blendpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendpoint.c; sourceTree = ""; };
+ 04F7806F12FB751400FC43C0 /* SDL_blendpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendpoint.h; sourceTree = ""; };
+ 04F7807012FB751400FC43C0 /* SDL_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_draw.h; sourceTree = ""; };
+ 04F7807112FB751400FC43C0 /* SDL_drawline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawline.c; sourceTree = ""; };
+ 04F7807212FB751400FC43C0 /* SDL_drawline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawline.h; sourceTree = ""; };
+ 04F7807312FB751400FC43C0 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = ""; };
+ 04F7807412FB751400FC43C0 /* SDL_drawpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawpoint.h; sourceTree = ""; };
+ 04F7807512FB751400FC43C0 /* SDL_renderer_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_renderer_sw_c.h; sourceTree = ""; };
+ 04F7808212FB753F00FC43C0 /* SDL_nullframebuffer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullframebuffer_c.h; sourceTree = ""; };
+ 04F7808312FB753F00FC43C0 /* SDL_nullframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullframebuffer.c; sourceTree = ""; };
04FFAB8912E23B8D00BA343D /* SDL_atomic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_atomic.c; sourceTree = ""; };
04FFAB8A12E23B8D00BA343D /* SDL_spinlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_spinlock.c; sourceTree = ""; };
04FFAB9312E23BDC00BA343D /* SDL_blendmode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_blendmode.h; path = ../../include/SDL_blendmode.h; sourceTree = SOURCE_ROOT; };
@@ -684,6 +692,18 @@
041B2CEC12FA0F680087D585 /* software */ = {
isa = PBXGroup;
children = (
+ 04F7806A12FB751400FC43C0 /* SDL_blendfillrect.c */,
+ 04F7806B12FB751400FC43C0 /* SDL_blendfillrect.h */,
+ 04F7806C12FB751400FC43C0 /* SDL_blendline.c */,
+ 04F7806D12FB751400FC43C0 /* SDL_blendline.h */,
+ 04F7806E12FB751400FC43C0 /* SDL_blendpoint.c */,
+ 04F7806F12FB751400FC43C0 /* SDL_blendpoint.h */,
+ 04F7807012FB751400FC43C0 /* SDL_draw.h */,
+ 04F7807112FB751400FC43C0 /* SDL_drawline.c */,
+ 04F7807212FB751400FC43C0 /* SDL_drawline.h */,
+ 04F7807312FB751400FC43C0 /* SDL_drawpoint.c */,
+ 04F7807412FB751400FC43C0 /* SDL_drawpoint.h */,
+ 04F7807512FB751400FC43C0 /* SDL_renderer_sw_c.h */,
041B2CED12FA0F680087D585 /* SDL_renderer_sw.c */,
);
path = software;
@@ -1083,12 +1103,6 @@
FDA685F40DF244C800F98A1A /* dummy */,
0495E6850E97408800152DFE /* SDL_glfuncs.h */,
0495E6840E97408800152DFE /* SDL_glesfuncs.h */,
- 043DD76B10FD8A0000DED673 /* SDL_alphamult.c */,
- 043DD76C10FD8A0000DED673 /* SDL_alphamult.h */,
- 043DD76D10FD8A0000DED673 /* SDL_blendfillrect.c */,
- 046387370F0B5B7D0041FD65 /* SDL_blendline.c */,
- 046387380F0B5B7D0041FD65 /* SDL_blendpoint.c */,
- 046387390F0B5B7D0041FD65 /* SDL_blendrect.c */,
FDA683000DF2374E00F98A1A /* SDL_blit.c */,
FDA683010DF2374E00F98A1A /* SDL_blit.h */,
FDA683020DF2374E00F98A1A /* SDL_blit_0.c */,
@@ -1103,10 +1117,6 @@
0463873A0F0B5B7D0041FD65 /* SDL_blit_slow.h */,
FDA6830B0DF2374E00F98A1A /* SDL_bmp.c */,
044E5FB711E606EB0076F181 /* SDL_clipboard.c */,
- 0463873B0F0B5B7D0041FD65 /* SDL_draw.h */,
- 0463873C0F0B5B7D0041FD65 /* SDL_drawline.c */,
- 0463873D0F0B5B7D0041FD65 /* SDL_drawpoint.c */,
- 043DD76E10FD8A0000DED673 /* SDL_drawrect.c */,
0463873E0F0B5B7D0041FD65 /* SDL_fillrect.c */,
FDA6830D0DF2374E00F98A1A /* SDL_gamma.c */,
FDA6830E0DF2374E00F98A1A /* SDL_leaks.h */,
@@ -1129,6 +1139,8 @@
children = (
FDA685F50DF244C800F98A1A /* SDL_nullevents.c */,
FDA685F60DF244C800F98A1A /* SDL_nullevents_c.h */,
+ 04F7808212FB753F00FC43C0 /* SDL_nullframebuffer_c.h */,
+ 04F7808312FB753F00FC43C0 /* SDL_nullframebuffer.c */,
FDA685F90DF244C800F98A1A /* SDL_nullvideo.c */,
FDA685FA0DF244C800F98A1A /* SDL_nullvideo.h */,
);
@@ -1202,13 +1214,11 @@
047677BD0EA76A31008ABAF1 /* SDL_syshaptic.h in Headers */,
04461DEE0EA76BA3006C462D /* SDL_haptic.h in Headers */,
046387420F0B5B7D0041FD65 /* SDL_blit_slow.h in Headers */,
- 046387430F0B5B7D0041FD65 /* SDL_draw.h in Headers */,
04B2ECEC1025CE4800F9BC5F /* SDL_atomic.h in Headers */,
04B2ECED1025CE4800F9BC5F /* SDL_power.h in Headers */,
04B2ECEE1025CE4800F9BC5F /* SDL_revision.h in Headers */,
04B2ED081025CF9E00F9BC5F /* SDL_config.h in Headers */,
04EC8B521025D12900431D42 /* SDL_config_iphoneos.h in Headers */,
- 043DD77010FD8A0000DED673 /* SDL_alphamult.h in Headers */,
04F2AF541104ABC300D6DDF7 /* SDL_assert.h in Headers */,
006E9888119552DD001DE610 /* SDL_rwopsbundlesupport.h in Headers */,
044E5FB511E6069F0076F181 /* SDL_clipboard.h in Headers */,
@@ -1224,6 +1234,14 @@
041B2CF212FA0F680087D585 /* SDL_sysrender.h in Headers */,
04409BA612FA989600FB9AA8 /* mmx.h in Headers */,
04409BA812FA989600FB9AA8 /* SDL_yuv_sw_c.h in Headers */,
+ 04F7807712FB751400FC43C0 /* SDL_blendfillrect.h in Headers */,
+ 04F7807912FB751400FC43C0 /* SDL_blendline.h in Headers */,
+ 04F7807B12FB751400FC43C0 /* SDL_blendpoint.h in Headers */,
+ 04F7807C12FB751400FC43C0 /* SDL_draw.h in Headers */,
+ 04F7807E12FB751400FC43C0 /* SDL_drawline.h in Headers */,
+ 04F7808012FB751400FC43C0 /* SDL_drawpoint.h in Headers */,
+ 04F7808112FB751400FC43C0 /* SDL_renderer_sw_c.h in Headers */,
+ 04F7808412FB753F00FC43C0 /* SDL_nullframebuffer_c.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1449,15 +1467,7 @@
047677BB0EA76A31008ABAF1 /* SDL_syshaptic.c in Sources */,
047677BC0EA76A31008ABAF1 /* SDL_haptic.c in Sources */,
047AF1B30EA98D6C00811173 /* SDL_sysloadso.c in Sources */,
- 0463873F0F0B5B7D0041FD65 /* SDL_blendline.c in Sources */,
- 046387400F0B5B7D0041FD65 /* SDL_blendpoint.c in Sources */,
- 046387410F0B5B7D0041FD65 /* SDL_blendrect.c in Sources */,
- 046387440F0B5B7D0041FD65 /* SDL_drawline.c in Sources */,
- 046387450F0B5B7D0041FD65 /* SDL_drawpoint.c in Sources */,
046387460F0B5B7D0041FD65 /* SDL_fillrect.c in Sources */,
- 043DD76F10FD8A0000DED673 /* SDL_alphamult.c in Sources */,
- 043DD77110FD8A0000DED673 /* SDL_blendfillrect.c in Sources */,
- 043DD77210FD8A0000DED673 /* SDL_drawrect.c in Sources */,
04F2AF561104ABD200D6DDF7 /* SDL_assert.c in Sources */,
56ED04E1118A8EE200A56AA6 /* SDL_power.c in Sources */,
56ED04E3118A8EFD00A56AA6 /* SDL_syspower.m in Sources */,
@@ -1473,6 +1483,12 @@
041B2CF312FA0F680087D585 /* SDL_renderer_sw.c in Sources */,
04409BA712FA989600FB9AA8 /* SDL_yuv_mmx.c in Sources */,
04409BA912FA989600FB9AA8 /* SDL_yuv_sw.c in Sources */,
+ 04F7807612FB751400FC43C0 /* SDL_blendfillrect.c in Sources */,
+ 04F7807812FB751400FC43C0 /* SDL_blendline.c in Sources */,
+ 04F7807A12FB751400FC43C0 /* SDL_blendpoint.c in Sources */,
+ 04F7807D12FB751400FC43C0 /* SDL_drawline.c in Sources */,
+ 04F7807F12FB751400FC43C0 /* SDL_drawpoint.c in Sources */,
+ 04F7808512FB753F00FC43C0 /* SDL_nullframebuffer.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Xcode/SDL/SDL.xcodeproj/project.pbxproj
index 9c774375e..6de4506aa 100755
--- a/Xcode/SDL/SDL.xcodeproj/project.pbxproj
+++ b/Xcode/SDL/SDL.xcodeproj/project.pbxproj
@@ -252,12 +252,6 @@
04BD011812E6671800899322 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEE912E6671800899322 /* SDL_nullevents_c.h */; };
04BD011B12E6671800899322 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEEC12E6671800899322 /* SDL_nullvideo.c */; };
04BD011C12E6671800899322 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEED12E6671800899322 /* SDL_nullvideo.h */; };
- 04BD016F12E6671800899322 /* SDL_alphamult.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4812E6671800899322 /* SDL_alphamult.c */; };
- 04BD017012E6671800899322 /* SDL_alphamult.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF4912E6671800899322 /* SDL_alphamult.h */; };
- 04BD017112E6671800899322 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4A12E6671800899322 /* SDL_blendfillrect.c */; };
- 04BD017212E6671800899322 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4B12E6671800899322 /* SDL_blendline.c */; };
- 04BD017312E6671800899322 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4C12E6671800899322 /* SDL_blendpoint.c */; };
- 04BD017412E6671800899322 /* SDL_blendrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4D12E6671800899322 /* SDL_blendrect.c */; };
04BD017512E6671800899322 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4E12E6671800899322 /* SDL_blit.c */; };
04BD017612E6671800899322 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF4F12E6671800899322 /* SDL_blit.h */; };
04BD017712E6671800899322 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5012E6671800899322 /* SDL_blit_0.c */; };
@@ -272,10 +266,6 @@
04BD018012E6671800899322 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5912E6671800899322 /* SDL_blit_slow.h */; };
04BD018112E6671800899322 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5A12E6671800899322 /* SDL_bmp.c */; };
04BD018212E6671800899322 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5B12E6671800899322 /* SDL_clipboard.c */; };
- 04BD018312E6671800899322 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5C12E6671800899322 /* SDL_draw.h */; };
- 04BD018412E6671800899322 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5D12E6671800899322 /* SDL_drawline.c */; };
- 04BD018512E6671800899322 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5E12E6671800899322 /* SDL_drawpoint.c */; };
- 04BD018612E6671800899322 /* SDL_drawrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5F12E6671800899322 /* SDL_drawrect.c */; };
04BD018712E6671800899322 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6012E6671800899322 /* SDL_fillrect.c */; };
04BD018812E6671800899322 /* SDL_gamma.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6112E6671800899322 /* SDL_gamma.c */; };
04BD018912E6671800899322 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF6212E6671800899322 /* SDL_glesfuncs.h */; };
@@ -461,12 +451,6 @@
04BD033212E6671800899322 /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEE912E6671800899322 /* SDL_nullevents_c.h */; };
04BD033512E6671800899322 /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFEEC12E6671800899322 /* SDL_nullvideo.c */; };
04BD033612E6671800899322 /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFEED12E6671800899322 /* SDL_nullvideo.h */; };
- 04BD038912E6671800899322 /* SDL_alphamult.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4812E6671800899322 /* SDL_alphamult.c */; };
- 04BD038A12E6671800899322 /* SDL_alphamult.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF4912E6671800899322 /* SDL_alphamult.h */; };
- 04BD038B12E6671800899322 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4A12E6671800899322 /* SDL_blendfillrect.c */; };
- 04BD038C12E6671800899322 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4B12E6671800899322 /* SDL_blendline.c */; };
- 04BD038D12E6671800899322 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4C12E6671800899322 /* SDL_blendpoint.c */; };
- 04BD038E12E6671800899322 /* SDL_blendrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4D12E6671800899322 /* SDL_blendrect.c */; };
04BD038F12E6671800899322 /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF4E12E6671800899322 /* SDL_blit.c */; };
04BD039012E6671800899322 /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF4F12E6671800899322 /* SDL_blit.h */; };
04BD039112E6671800899322 /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5012E6671800899322 /* SDL_blit_0.c */; };
@@ -481,10 +465,6 @@
04BD039A12E6671800899322 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5912E6671800899322 /* SDL_blit_slow.h */; };
04BD039B12E6671800899322 /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5A12E6671800899322 /* SDL_bmp.c */; };
04BD039C12E6671800899322 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5B12E6671800899322 /* SDL_clipboard.c */; };
- 04BD039D12E6671800899322 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF5C12E6671800899322 /* SDL_draw.h */; };
- 04BD039E12E6671800899322 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5D12E6671800899322 /* SDL_drawline.c */; };
- 04BD039F12E6671800899322 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5E12E6671800899322 /* SDL_drawpoint.c */; };
- 04BD03A012E6671800899322 /* SDL_drawrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF5F12E6671800899322 /* SDL_drawrect.c */; };
04BD03A112E6671800899322 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6012E6671800899322 /* SDL_fillrect.c */; };
04BD03A212E6671800899322 /* SDL_gamma.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BDFF6112E6671800899322 /* SDL_gamma.c */; };
04BD03A312E6671800899322 /* SDL_glesfuncs.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BDFF6212E6671800899322 /* SDL_glesfuncs.h */; };
@@ -564,6 +544,34 @@
04DEA57311E6006A00386CAC /* SDL_input.h in Headers */ = {isa = PBXBuildFile; fileRef = 04DEA56F11E6006A00386CAC /* SDL_input.h */; };
04F2AF691104AC4500D6DDF7 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F2AF681104AC4500D6DDF7 /* SDL_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
04F2AF6A1104AC4500D6DDF7 /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F2AF681104AC4500D6DDF7 /* SDL_assert.h */; };
+ 04F7803912FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */; };
+ 04F7803A12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */; };
+ 04F7803B12FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */; };
+ 04F7803C12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */; };
+ 04F7804912FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */; };
+ 04F7804A12FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */; };
+ 04F7804B12FB74A200FC43C0 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */; };
+ 04F7804C12FB74A200FC43C0 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804012FB74A200FC43C0 /* SDL_blendline.h */; };
+ 04F7804D12FB74A200FC43C0 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */; };
+ 04F7804E12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */; };
+ 04F7804F12FB74A200FC43C0 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804312FB74A200FC43C0 /* SDL_draw.h */; };
+ 04F7805012FB74A200FC43C0 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804412FB74A200FC43C0 /* SDL_drawline.c */; };
+ 04F7805112FB74A200FC43C0 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804512FB74A200FC43C0 /* SDL_drawline.h */; };
+ 04F7805212FB74A200FC43C0 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */; };
+ 04F7805312FB74A200FC43C0 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */; };
+ 04F7805412FB74A200FC43C0 /* SDL_renderer_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804812FB74A200FC43C0 /* SDL_renderer_sw_c.h */; };
+ 04F7805512FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */; };
+ 04F7805612FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */; };
+ 04F7805712FB74A200FC43C0 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */; };
+ 04F7805812FB74A200FC43C0 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804012FB74A200FC43C0 /* SDL_blendline.h */; };
+ 04F7805912FB74A200FC43C0 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */; };
+ 04F7805A12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */; };
+ 04F7805B12FB74A200FC43C0 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804312FB74A200FC43C0 /* SDL_draw.h */; };
+ 04F7805C12FB74A200FC43C0 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804412FB74A200FC43C0 /* SDL_drawline.c */; };
+ 04F7805D12FB74A200FC43C0 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804512FB74A200FC43C0 /* SDL_drawline.h */; };
+ 04F7805E12FB74A200FC43C0 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */; };
+ 04F7805F12FB74A200FC43C0 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */; };
+ 04F7806012FB74A200FC43C0 /* SDL_renderer_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7804812FB74A200FC43C0 /* SDL_renderer_sw_c.h */; };
453773821207C518002F0F45 /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = 453773811207C518002F0F45 /* SDL_shape.h */; settings = {ATTRIBUTES = (Public, ); }; };
8CB0A77811F6A87F00CBA2DE /* SDL_gesture.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CB0A77611F6A87F00CBA2DE /* SDL_gesture.h */; settings = {ATTRIBUTES = (Public, ); }; };
8CB0A77911F6A87F00CBA2DE /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CB0A77711F6A87F00CBA2DE /* SDL_touch.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -818,12 +826,6 @@
04BDFEE912E6671800899322 /* SDL_nullevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullevents_c.h; sourceTree = ""; };
04BDFEEC12E6671800899322 /* SDL_nullvideo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullvideo.c; sourceTree = ""; };
04BDFEED12E6671800899322 /* SDL_nullvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullvideo.h; sourceTree = ""; };
- 04BDFF4812E6671800899322 /* SDL_alphamult.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_alphamult.c; sourceTree = ""; };
- 04BDFF4912E6671800899322 /* SDL_alphamult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_alphamult.h; sourceTree = ""; };
- 04BDFF4A12E6671800899322 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = ""; };
- 04BDFF4B12E6671800899322 /* SDL_blendline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendline.c; sourceTree = ""; };
- 04BDFF4C12E6671800899322 /* SDL_blendpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendpoint.c; sourceTree = ""; };
- 04BDFF4D12E6671800899322 /* SDL_blendrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendrect.c; sourceTree = ""; };
04BDFF4E12E6671800899322 /* SDL_blit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit.c; sourceTree = ""; };
04BDFF4F12E6671800899322 /* SDL_blit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit.h; sourceTree = ""; };
04BDFF5012E6671800899322 /* SDL_blit_0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_0.c; sourceTree = ""; };
@@ -838,10 +840,6 @@
04BDFF5912E6671800899322 /* SDL_blit_slow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_slow.h; sourceTree = ""; };
04BDFF5A12E6671800899322 /* SDL_bmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_bmp.c; sourceTree = ""; };
04BDFF5B12E6671800899322 /* SDL_clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboard.c; sourceTree = ""; };
- 04BDFF5C12E6671800899322 /* SDL_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_draw.h; sourceTree = ""; };
- 04BDFF5D12E6671800899322 /* SDL_drawline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawline.c; sourceTree = ""; };
- 04BDFF5E12E6671800899322 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = ""; };
- 04BDFF5F12E6671800899322 /* SDL_drawrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawrect.c; sourceTree = ""; };
04BDFF6012E6671800899322 /* SDL_fillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_fillrect.c; sourceTree = ""; };
04BDFF6112E6671800899322 /* SDL_gamma.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gamma.c; sourceTree = ""; };
04BDFF6212E6671800899322 /* SDL_glesfuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_glesfuncs.h; sourceTree = ""; };
@@ -918,6 +916,20 @@
04BDFFFA12E6671800899322 /* XF86VMode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = XF86VMode.c; sourceTree = ""; };
04DEA56F11E6006A00386CAC /* SDL_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_input.h; path = ../../include/SDL_input.h; sourceTree = SOURCE_ROOT; };
04F2AF681104AC4500D6DDF7 /* SDL_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_assert.h; path = ../../include/SDL_assert.h; sourceTree = SOURCE_ROOT; };
+ 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullframebuffer_c.h; sourceTree = ""; };
+ 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullframebuffer.c; sourceTree = ""; };
+ 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = ""; };
+ 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendfillrect.h; sourceTree = ""; };
+ 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendline.c; sourceTree = ""; };
+ 04F7804012FB74A200FC43C0 /* SDL_blendline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendline.h; sourceTree = ""; };
+ 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendpoint.c; sourceTree = ""; };
+ 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendpoint.h; sourceTree = ""; };
+ 04F7804312FB74A200FC43C0 /* SDL_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_draw.h; sourceTree = ""; };
+ 04F7804412FB74A200FC43C0 /* SDL_drawline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawline.c; sourceTree = ""; };
+ 04F7804512FB74A200FC43C0 /* SDL_drawline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawline.h; sourceTree = ""; };
+ 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = ""; };
+ 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawpoint.h; sourceTree = ""; };
+ 04F7804812FB74A200FC43C0 /* SDL_renderer_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_renderer_sw_c.h; sourceTree = ""; };
0C5AF5E501191D2B7F000001 /* begin_code.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = begin_code.h; path = ../../include/begin_code.h; sourceTree = SOURCE_ROOT; };
0C5AF5E601191D2B7F000001 /* close_code.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = close_code.h; path = ../../include/close_code.h; sourceTree = SOURCE_ROOT; };
0C5AF5E801191D2B7F000001 /* SDL_audio.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = SDL_audio.h; path = ../../include/SDL_audio.h; sourceTree = SOURCE_ROOT; };
@@ -1210,6 +1222,18 @@
041B2CA012FA0D680087D585 /* software */ = {
isa = PBXGroup;
children = (
+ 04F7803D12FB74A200FC43C0 /* SDL_blendfillrect.c */,
+ 04F7803E12FB74A200FC43C0 /* SDL_blendfillrect.h */,
+ 04F7803F12FB74A200FC43C0 /* SDL_blendline.c */,
+ 04F7804012FB74A200FC43C0 /* SDL_blendline.h */,
+ 04F7804112FB74A200FC43C0 /* SDL_blendpoint.c */,
+ 04F7804212FB74A200FC43C0 /* SDL_blendpoint.h */,
+ 04F7804312FB74A200FC43C0 /* SDL_draw.h */,
+ 04F7804412FB74A200FC43C0 /* SDL_drawline.c */,
+ 04F7804512FB74A200FC43C0 /* SDL_drawline.h */,
+ 04F7804612FB74A200FC43C0 /* SDL_drawpoint.c */,
+ 04F7804712FB74A200FC43C0 /* SDL_drawpoint.h */,
+ 04F7804812FB74A200FC43C0 /* SDL_renderer_sw_c.h */,
041B2CA112FA0D680087D585 /* SDL_renderer_sw.c */,
);
path = software;
@@ -1487,12 +1511,6 @@
04BDFEE712E6671800899322 /* dummy */,
04BDFFB712E6671800899322 /* x11 */,
04BDFFD712E6671800899322 /* Xext */,
- 04BDFF4812E6671800899322 /* SDL_alphamult.c */,
- 04BDFF4912E6671800899322 /* SDL_alphamult.h */,
- 04BDFF4A12E6671800899322 /* SDL_blendfillrect.c */,
- 04BDFF4B12E6671800899322 /* SDL_blendline.c */,
- 04BDFF4C12E6671800899322 /* SDL_blendpoint.c */,
- 04BDFF4D12E6671800899322 /* SDL_blendrect.c */,
04BDFF4E12E6671800899322 /* SDL_blit.c */,
04BDFF4F12E6671800899322 /* SDL_blit.h */,
04BDFF5012E6671800899322 /* SDL_blit_0.c */,
@@ -1507,10 +1525,6 @@
04BDFF5912E6671800899322 /* SDL_blit_slow.h */,
04BDFF5A12E6671800899322 /* SDL_bmp.c */,
04BDFF5B12E6671800899322 /* SDL_clipboard.c */,
- 04BDFF5C12E6671800899322 /* SDL_draw.h */,
- 04BDFF5D12E6671800899322 /* SDL_drawline.c */,
- 04BDFF5E12E6671800899322 /* SDL_drawpoint.c */,
- 04BDFF5F12E6671800899322 /* SDL_drawrect.c */,
04BDFF6012E6671800899322 /* SDL_fillrect.c */,
04BDFF6112E6671800899322 /* SDL_gamma.c */,
04BDFF6212E6671800899322 /* SDL_glesfuncs.h */,
@@ -1562,6 +1576,8 @@
children = (
04BDFEE812E6671800899322 /* SDL_nullevents.c */,
04BDFEE912E6671800899322 /* SDL_nullevents_c.h */,
+ 04F7803712FB748500FC43C0 /* SDL_nullframebuffer_c.h */,
+ 04F7803812FB748500FC43C0 /* SDL_nullframebuffer.c */,
04BDFEEC12E6671800899322 /* SDL_nullvideo.c */,
04BDFEED12E6671800899322 /* SDL_nullvideo.h */,
);
@@ -1893,12 +1909,10 @@
04BD010312E6671800899322 /* SDL_cocoawindow.h in Headers */,
04BD011812E6671800899322 /* SDL_nullevents_c.h in Headers */,
04BD011C12E6671800899322 /* SDL_nullvideo.h in Headers */,
- 04BD017012E6671800899322 /* SDL_alphamult.h in Headers */,
04BD017612E6671800899322 /* SDL_blit.h in Headers */,
04BD017B12E6671800899322 /* SDL_blit_auto.h in Headers */,
04BD017D12E6671800899322 /* SDL_blit_copy.h in Headers */,
04BD018012E6671800899322 /* SDL_blit_slow.h in Headers */,
- 04BD018312E6671800899322 /* SDL_draw.h in Headers */,
04BD018912E6671800899322 /* SDL_glesfuncs.h in Headers */,
04BD018A12E6671800899322 /* SDL_glfuncs.h in Headers */,
04BD018B12E6671800899322 /* SDL_leaks.h in Headers */,
@@ -1942,6 +1956,14 @@
041B2CA612FA0D680087D585 /* SDL_sysrender.h in Headers */,
04409B9112FA97ED00FB9AA8 /* mmx.h in Headers */,
04409B9312FA97ED00FB9AA8 /* SDL_yuv_sw_c.h in Headers */,
+ 04F7803912FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */,
+ 04F7804A12FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */,
+ 04F7804C12FB74A200FC43C0 /* SDL_blendline.h in Headers */,
+ 04F7804E12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */,
+ 04F7804F12FB74A200FC43C0 /* SDL_draw.h in Headers */,
+ 04F7805112FB74A200FC43C0 /* SDL_drawline.h in Headers */,
+ 04F7805312FB74A200FC43C0 /* SDL_drawpoint.h in Headers */,
+ 04F7805412FB74A200FC43C0 /* SDL_renderer_sw_c.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2016,12 +2038,10 @@
04BD031D12E6671800899322 /* SDL_cocoawindow.h in Headers */,
04BD033212E6671800899322 /* SDL_nullevents_c.h in Headers */,
04BD033612E6671800899322 /* SDL_nullvideo.h in Headers */,
- 04BD038A12E6671800899322 /* SDL_alphamult.h in Headers */,
04BD039012E6671800899322 /* SDL_blit.h in Headers */,
04BD039512E6671800899322 /* SDL_blit_auto.h in Headers */,
04BD039712E6671800899322 /* SDL_blit_copy.h in Headers */,
04BD039A12E6671800899322 /* SDL_blit_slow.h in Headers */,
- 04BD039D12E6671800899322 /* SDL_draw.h in Headers */,
04BD03A312E6671800899322 /* SDL_glesfuncs.h in Headers */,
04BD03A412E6671800899322 /* SDL_glfuncs.h in Headers */,
04BD03A512E6671800899322 /* SDL_leaks.h in Headers */,
@@ -2065,6 +2085,14 @@
041B2CAC12FA0D680087D585 /* SDL_sysrender.h in Headers */,
04409B9512FA97ED00FB9AA8 /* mmx.h in Headers */,
04409B9712FA97ED00FB9AA8 /* SDL_yuv_sw_c.h in Headers */,
+ 04F7803B12FB748500FC43C0 /* SDL_nullframebuffer_c.h in Headers */,
+ 04F7805612FB74A200FC43C0 /* SDL_blendfillrect.h in Headers */,
+ 04F7805812FB74A200FC43C0 /* SDL_blendline.h in Headers */,
+ 04F7805A12FB74A200FC43C0 /* SDL_blendpoint.h in Headers */,
+ 04F7805B12FB74A200FC43C0 /* SDL_draw.h in Headers */,
+ 04F7805D12FB74A200FC43C0 /* SDL_drawline.h in Headers */,
+ 04F7805F12FB74A200FC43C0 /* SDL_drawpoint.h in Headers */,
+ 04F7806012FB74A200FC43C0 /* SDL_renderer_sw_c.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2385,11 +2413,6 @@
04BD010412E6671800899322 /* SDL_cocoawindow.m in Sources */,
04BD011712E6671800899322 /* SDL_nullevents.c in Sources */,
04BD011B12E6671800899322 /* SDL_nullvideo.c in Sources */,
- 04BD016F12E6671800899322 /* SDL_alphamult.c in Sources */,
- 04BD017112E6671800899322 /* SDL_blendfillrect.c in Sources */,
- 04BD017212E6671800899322 /* SDL_blendline.c in Sources */,
- 04BD017312E6671800899322 /* SDL_blendpoint.c in Sources */,
- 04BD017412E6671800899322 /* SDL_blendrect.c in Sources */,
04BD017512E6671800899322 /* SDL_blit.c in Sources */,
04BD017712E6671800899322 /* SDL_blit_0.c in Sources */,
04BD017812E6671800899322 /* SDL_blit_1.c in Sources */,
@@ -2400,9 +2423,6 @@
04BD017F12E6671800899322 /* SDL_blit_slow.c in Sources */,
04BD018112E6671800899322 /* SDL_bmp.c in Sources */,
04BD018212E6671800899322 /* SDL_clipboard.c in Sources */,
- 04BD018412E6671800899322 /* SDL_drawline.c in Sources */,
- 04BD018512E6671800899322 /* SDL_drawpoint.c in Sources */,
- 04BD018612E6671800899322 /* SDL_drawrect.c in Sources */,
04BD018712E6671800899322 /* SDL_fillrect.c in Sources */,
04BD018812E6671800899322 /* SDL_gamma.c in Sources */,
04BD018C12E6671800899322 /* SDL_pixels.c in Sources */,
@@ -2443,6 +2463,12 @@
041B2CA712FA0D680087D585 /* SDL_renderer_sw.c in Sources */,
04409B9212FA97ED00FB9AA8 /* SDL_yuv_mmx.c in Sources */,
04409B9412FA97ED00FB9AA8 /* SDL_yuv_sw.c in Sources */,
+ 04F7803A12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */,
+ 04F7804912FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */,
+ 04F7804B12FB74A200FC43C0 /* SDL_blendline.c in Sources */,
+ 04F7804D12FB74A200FC43C0 /* SDL_blendpoint.c in Sources */,
+ 04F7805012FB74A200FC43C0 /* SDL_drawline.c in Sources */,
+ 04F7805212FB74A200FC43C0 /* SDL_drawpoint.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2512,11 +2538,6 @@
04BD031E12E6671800899322 /* SDL_cocoawindow.m in Sources */,
04BD033112E6671800899322 /* SDL_nullevents.c in Sources */,
04BD033512E6671800899322 /* SDL_nullvideo.c in Sources */,
- 04BD038912E6671800899322 /* SDL_alphamult.c in Sources */,
- 04BD038B12E6671800899322 /* SDL_blendfillrect.c in Sources */,
- 04BD038C12E6671800899322 /* SDL_blendline.c in Sources */,
- 04BD038D12E6671800899322 /* SDL_blendpoint.c in Sources */,
- 04BD038E12E6671800899322 /* SDL_blendrect.c in Sources */,
04BD038F12E6671800899322 /* SDL_blit.c in Sources */,
04BD039112E6671800899322 /* SDL_blit_0.c in Sources */,
04BD039212E6671800899322 /* SDL_blit_1.c in Sources */,
@@ -2527,9 +2548,6 @@
04BD039912E6671800899322 /* SDL_blit_slow.c in Sources */,
04BD039B12E6671800899322 /* SDL_bmp.c in Sources */,
04BD039C12E6671800899322 /* SDL_clipboard.c in Sources */,
- 04BD039E12E6671800899322 /* SDL_drawline.c in Sources */,
- 04BD039F12E6671800899322 /* SDL_drawpoint.c in Sources */,
- 04BD03A012E6671800899322 /* SDL_drawrect.c in Sources */,
04BD03A112E6671800899322 /* SDL_fillrect.c in Sources */,
04BD03A212E6671800899322 /* SDL_gamma.c in Sources */,
04BD03A612E6671800899322 /* SDL_pixels.c in Sources */,
@@ -2570,6 +2588,12 @@
041B2CAD12FA0D680087D585 /* SDL_renderer_sw.c in Sources */,
04409B9612FA97ED00FB9AA8 /* SDL_yuv_mmx.c in Sources */,
04409B9812FA97ED00FB9AA8 /* SDL_yuv_sw.c in Sources */,
+ 04F7803C12FB748500FC43C0 /* SDL_nullframebuffer.c in Sources */,
+ 04F7805512FB74A200FC43C0 /* SDL_blendfillrect.c in Sources */,
+ 04F7805712FB74A200FC43C0 /* SDL_blendline.c in Sources */,
+ 04F7805912FB74A200FC43C0 /* SDL_blendpoint.c in Sources */,
+ 04F7805C12FB74A200FC43C0 /* SDL_drawline.c in Sources */,
+ 04F7805E12FB74A200FC43C0 /* SDL_drawpoint.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/include/SDL_render.h b/include/SDL_render.h
index 16e512c71..fa5b0d16e 100644
--- a/include/SDL_render.h
+++ b/include/SDL_render.h
@@ -154,12 +154,25 @@ extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index,
*
* \return A valid rendering context or NULL if there was an error.
*
+ * \sa SDL_CreateSoftwareRenderer()
* \sa SDL_GetRendererInfo()
* \sa SDL_DestroyRenderer()
*/
extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window,
int index, Uint32 flags);
+/**
+ * \brief Create a 2D software rendering context for a surface.
+ *
+ * \param surface The surface where rendering is done.
+ *
+ * \return A valid rendering context or NULL if there was an error.
+ *
+ * \sa SDL_CreateRenderer()
+ * \sa SDL_DestroyRenderer()
+ */
+extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface);
+
/**
* \brief Get information about a rendering context.
*/
diff --git a/include/SDL_video.h b/include/SDL_video.h
index 1ac2ebc56..e206729cb 100644
--- a/include/SDL_video.h
+++ b/include/SDL_video.h
@@ -607,6 +607,40 @@ extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window);
extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window,
int fullscreen);
+/**
+ * \brief Get an SDL surface associated with the window.
+ *
+ * \return A surface in the optimal format for the window, or NULL on error.
+ *
+ * \note You may not combine this with 3D or the rendering API on this window.
+ *
+ * \sa SDL_UpdateWindowSurface()
+ * \sa SDL_UpdateWindowSurfaceRects()
+ */
+extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window);
+
+/**
+ * \brief Copy the window surface to the screen.
+ *
+ * \return 0 on success, or -1 on error.
+ *
+ * \sa SDL_GetWindowSurface()
+ * \sa SDL_UpdateWindowSurfaceRects()
+ */
+extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window);
+
+/**
+ * \brief Copy a number of rectangles on the window surface to the screen.
+ *
+ * \return 0 on success, or -1 on error.
+ *
+ * \sa SDL_GetWindowSurface()
+ * \sa SDL_UpdateWindowSurfaceRect()
+ */
+extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window,
+ int numrects,
+ SDL_Rect * rects);
+
/**
* \brief Set a window's input grab mode.
*
diff --git a/src/events/SDL_windowevents.c b/src/events/SDL_windowevents.c
index d9ce4bd49..fa34034a2 100644
--- a/src/events/SDL_windowevents.c
+++ b/src/events/SDL_windowevents.c
@@ -106,6 +106,7 @@ SDL_SendWindowEvent(SDL_Window * window, Uint8 windowevent, int data1,
}
window->w = data1;
window->h = data2;
+ SDL_OnWindowResized(window);
break;
case SDL_WINDOWEVENT_MINIMIZED:
if (window->flags & SDL_WINDOW_MINIMIZED) {
diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c
index 405d83728..923f3c24d 100644
--- a/src/render/SDL_render.c
+++ b/src/render/SDL_render.c
@@ -26,6 +26,7 @@
#include "SDL_render.h"
#include "SDL_sysrender.h"
#include "../video/SDL_pixels_c.h"
+#include "software/SDL_renderer_sw_c.h"
#define CHECK_RENDERER_MAGIC(renderer, retval) \
@@ -137,12 +138,19 @@ SDL_CreateRenderer(SDL_Window * window, int index, Uint32 flags)
if (renderer) {
renderer->magic = &renderer_magic;
+ renderer->window = window;
SDL_AddEventWatch(SDL_RendererEventWatch, renderer);
}
return renderer;
}
+SDL_Renderer *
+SDL_CreateSoftwareRenderer(SDL_Surface * surface)
+{
+ return SW_CreateRendererForSurface(surface);
+}
+
int
SDL_GetRendererInfo(SDL_Renderer * renderer, SDL_RendererInfo * info)
{
diff --git a/src/render/direct3d/SDL_d3drender.c b/src/render/direct3d/SDL_d3drender.c
index 8c4446b02..6e59f1f83 100755
--- a/src/render/direct3d/SDL_d3drender.c
+++ b/src/render/direct3d/SDL_d3drender.c
@@ -327,7 +327,6 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags)
renderer->DestroyTexture = D3D_DestroyTexture;
renderer->DestroyRenderer = D3D_DestroyRenderer;
renderer->info = D3D_RenderDriver.info;
- renderer->window = window;
renderer->driverdata = data;
renderer->info.flags = SDL_RENDERER_ACCELERATED;
diff --git a/src/render/opengl/SDL_renderer_gl.c b/src/render/opengl/SDL_renderer_gl.c
index 76db7113b..fe04edd85 100644
--- a/src/render/opengl/SDL_renderer_gl.c
+++ b/src/render/opengl/SDL_renderer_gl.c
@@ -209,7 +209,6 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags)
renderer->DestroyTexture = GL_DestroyTexture;
renderer->DestroyRenderer = GL_DestroyRenderer;
renderer->info = GL_RenderDriver.info;
- renderer->window = window;
renderer->driverdata = data;
renderer->info.flags = SDL_RENDERER_ACCELERATED;
diff --git a/src/render/opengles/SDL_renderer_gles.c b/src/render/opengles/SDL_renderer_gles.c
index fa14ed10e..b3feab514 100644
--- a/src/render/opengles/SDL_renderer_gles.c
+++ b/src/render/opengles/SDL_renderer_gles.c
@@ -202,7 +202,6 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags)
renderer->DestroyTexture = GLES_DestroyTexture;
renderer->DestroyRenderer = GLES_DestroyRenderer;
renderer->info = GL_ES_RenderDriver.info;
- renderer->window = window;
renderer->driverdata = data;
renderer->info.flags = SDL_RENDERER_ACCELERATED;
diff --git a/src/render/software/SDL_blendline.c b/src/render/software/SDL_blendline.c
old mode 100644
new mode 100755
index dce6a1a30..50f8683ce
--- a/src/render/software/SDL_blendline.c
+++ b/src/render/software/SDL_blendline.c
@@ -23,6 +23,7 @@
#include "SDL_draw.h"
#include "SDL_blendline.h"
+#include "SDL_blendpoint.h"
static void
diff --git a/src/render/software/SDL_drawline.c b/src/render/software/SDL_drawline.c
old mode 100644
new mode 100755
index 72b86ba0d..508c017ef
--- a/src/render/software/SDL_drawline.c
+++ b/src/render/software/SDL_drawline.c
@@ -23,6 +23,7 @@
#include "SDL_draw.h"
#include "SDL_drawline.h"
+#include "SDL_drawpoint.h"
static void
diff --git a/src/render/software/SDL_renderer_sw.c b/src/render/software/SDL_renderer_sw.c
index ffd02ee4d..c70934f39 100644
--- a/src/render/software/SDL_renderer_sw.c
+++ b/src/render/software/SDL_renderer_sw.c
@@ -69,7 +69,7 @@ SDL_RenderDriver SW_RenderDriver = {
SW_CreateRenderer,
{
"software",
- (SDL_RENDERER_PRESENTVSYNC),
+ 0,
8,
{
SDL_PIXELFORMAT_RGB555,
@@ -87,61 +87,19 @@ SDL_RenderDriver SW_RenderDriver = {
typedef struct
{
- Uint32 format;
SDL_bool updateSize;
- SDL_Texture *texture;
- SDL_Surface surface;
- SDL_Renderer *renderer;
+ SDL_Surface *surface;
} SW_RenderData;
-static SDL_Texture *
-CreateTexture(SDL_Renderer * renderer, Uint32 format, int w, int h)
-{
- SDL_Texture *texture;
-
- texture = (SDL_Texture *) SDL_calloc(1, sizeof(*texture));
- if (!texture) {
- SDL_OutOfMemory();
- return NULL;
- }
-
- texture->format = format;
- texture->access = SDL_TEXTUREACCESS_STREAMING;
- texture->w = w;
- texture->h = h;
- texture->renderer = renderer;
-
- if (renderer->CreateTexture(renderer, texture) < 0) {
- SDL_free(texture);
- return NULL;
- }
- return texture;
-}
-
-static void
-DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture)
-{
- renderer->DestroyTexture(renderer, texture);
- SDL_free(texture);
-}
SDL_Renderer *
-SW_CreateRenderer(SDL_Window * window, Uint32 flags)
+SW_CreateRendererForSurface(SDL_Surface * surface)
{
SDL_Renderer *renderer;
SW_RenderData *data;
- int i;
- int w, h;
- Uint32 format;
- int bpp;
- Uint32 Rmask, Gmask, Bmask, Amask;
- Uint32 renderer_flags;
- const char *desired_driver;
- format = SDL_GetWindowPixelFormat(window);
- if (!SDL_PixelFormatEnumToMasks
- (format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) {
- SDL_SetError("Unknown display format");
+ if (!surface) {
+ SDL_SetError("Can't create renderer for NULL surface");
return NULL;
}
@@ -157,6 +115,8 @@ SW_CreateRenderer(SDL_Window * window, Uint32 flags)
SDL_OutOfMemory();
return NULL;
}
+ data->surface = surface;
+
renderer->WindowEvent = SW_WindowEvent;
renderer->CreateTexture = SW_CreateTexture;
renderer->SetTextureColorMod = SW_SetTextureColorMod;
@@ -174,80 +134,34 @@ SW_CreateRenderer(SDL_Window * window, Uint32 flags)
renderer->RenderPresent = SW_RenderPresent;
renderer->DestroyRenderer = SW_DestroyRenderer;
renderer->info = SW_RenderDriver.info;
- renderer->info.flags = 0;
- renderer->window = window;
renderer->driverdata = data;
- data->format = format;
-
- /* Find a render driver that we can use to display data */
- renderer_flags = 0;
- if (flags & SDL_RENDERER_PRESENTVSYNC) {
- renderer_flags |= SDL_RENDERER_PRESENTVSYNC;
- }
- desired_driver = SDL_getenv("SDL_VIDEO_RENDERER_SWDRIVER");
- for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) {
- SDL_RendererInfo info;
- SDL_GetRenderDriverInfo(i, &info);
- if (SDL_strcmp(info.name, SW_RenderDriver.info.name) == 0) {
- continue;
- }
- if (desired_driver
- && SDL_strcasecmp(desired_driver, info.name) != 0) {
- continue;
- }
- data->renderer = SDL_CreateRenderer(window, i, renderer_flags);
- if (data->renderer) {
- break;
- }
- }
- if (i == SDL_GetNumRenderDrivers()) {
- SW_DestroyRenderer(renderer);
- SDL_SetError("Couldn't find display render driver");
- return NULL;
- }
- if (data->renderer->info.flags & SDL_RENDERER_PRESENTVSYNC) {
- renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC;
- }
-
- /* Create the textures we'll use for display */
- SDL_GetWindowSize(window, &w, &h);
- data->texture = CreateTexture(data->renderer, data->format, w, h);
- if (!data->texture) {
- SW_DestroyRenderer(renderer);
- return NULL;
- }
-
- /* Create a surface we'll use for rendering */
- data->surface.flags = SDL_PREALLOC;
- data->surface.format = SDL_AllocFormat(bpp, Rmask, Gmask, Bmask, Amask);
- if (!data->surface.format) {
- SW_DestroyRenderer(renderer);
- return NULL;
- }
-
return renderer;
}
-static SDL_Texture *
+SDL_Renderer *
+SW_CreateRenderer(SDL_Window * window, Uint32 flags)
+{
+ SDL_Surface *surface;
+
+ surface = SDL_GetWindowSurface(window);
+ if (!surface) {
+ return NULL;
+ }
+ return SW_CreateRendererForSurface(surface);
+}
+
+static SDL_Surface *
SW_ActivateRenderer(SDL_Renderer * renderer)
{
SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
SDL_Window *window = renderer->window;
if (data->updateSize) {
- /* Recreate the textures for the new window size */
- int w, h;
- if (data->texture) {
- DestroyTexture(data->renderer, data->texture);
- }
- SDL_GetWindowSize(window, &w, &h);
- data->texture = CreateTexture(data->renderer, data->format, w, h);
- if (data->texture) {
- data->updateSize = SDL_FALSE;
- }
+ data->surface = SDL_GetWindowSurface(window);
+ data->updateSize = SDL_FALSE;
}
- return data->texture;
+ return data->surface;
}
static void
@@ -356,264 +270,130 @@ static int
SW_RenderDrawPoints(SDL_Renderer * renderer, const SDL_Point * points,
int count)
{
- SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
- SDL_Texture *texture = SW_ActivateRenderer(renderer);
- SDL_Rect rect;
- int i;
- int x, y;
- int status = 0;
+ SDL_Surface *surface = SW_ActivateRenderer(renderer);
- if (!texture) {
+ if (!surface) {
return -1;
}
- /* Get the smallest rectangle that contains everything */
- rect.x = 0;
- rect.y = 0;
- rect.w = texture->w;
- rect.h = texture->h;
- if (!SDL_EnclosePoints(points, count, &rect, &rect)) {
- /* Nothing to draw */
- return 0;
- }
-
- if (data->renderer->LockTexture(data->renderer, texture, &rect,
- &data->surface.pixels,
- &data->surface.pitch) < 0) {
- return -1;
- }
-
- data->surface.clip_rect.w = data->surface.w = rect.w;
- data->surface.clip_rect.h = data->surface.h = rect.h;
-
/* Draw the points! */
if (renderer->blendMode == SDL_BLENDMODE_NONE) {
- Uint32 color = SDL_MapRGBA(data->surface.format,
+ Uint32 color = SDL_MapRGBA(surface->format,
renderer->r, renderer->g, renderer->b,
renderer->a);
- for (i = 0; i < count; ++i) {
- x = points[i].x - rect.x;
- y = points[i].y - rect.y;
-
- status = SDL_DrawPoint(&data->surface, x, y, color);
- }
+ return SDL_DrawPoints(surface, points, count, color);
} else {
- for (i = 0; i < count; ++i) {
- x = points[i].x - rect.x;
- y = points[i].y - rect.y;
-
- status = SDL_BlendPoint(&data->surface, x, y,
- renderer->blendMode,
- renderer->r, renderer->g, renderer->b,
- renderer->a);
- }
+ return SDL_BlendPoints(surface, points, count,
+ renderer->blendMode,
+ renderer->r, renderer->g, renderer->b,
+ renderer->a);
}
-
- data->renderer->UnlockTexture(data->renderer, texture);
-
- return status;
}
static int
SW_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points,
int count)
{
- SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
- SDL_Texture *texture = SW_ActivateRenderer(renderer);
- SDL_Rect clip, rect;
- int i;
- int x1, y1, x2, y2;
- int status = 0;
+ SDL_Surface *surface = SW_ActivateRenderer(renderer);
- if (!texture) {
+ if (!surface) {
return -1;
}
- /* Get the smallest rectangle that contains everything */
- clip.x = 0;
- clip.y = 0;
- clip.w = texture->w;
- clip.h = texture->h;
- SDL_EnclosePoints(points, count, NULL, &rect);
- if (!SDL_IntersectRect(&rect, &clip, &rect)) {
- /* Nothing to draw */
- return 0;
- }
-
- if (data->renderer->LockTexture(data->renderer, texture, &rect,
- &data->surface.pixels,
- &data->surface.pitch) < 0) {
- return -1;
- }
-
- data->surface.clip_rect.w = data->surface.w = rect.w;
- data->surface.clip_rect.h = data->surface.h = rect.h;
-
- /* Draw the points! */
+ /* Draw the lines! */
if (renderer->blendMode == SDL_BLENDMODE_NONE) {
- Uint32 color = SDL_MapRGBA(data->surface.format,
+ Uint32 color = SDL_MapRGBA(surface->format,
renderer->r, renderer->g, renderer->b,
renderer->a);
- for (i = 1; i < count; ++i) {
- x1 = points[i-1].x - rect.x;
- y1 = points[i-1].y - rect.y;
- x2 = points[i].x - rect.x;
- y2 = points[i].y - rect.y;
-
- status = SDL_DrawLine(&data->surface, x1, y1, x2, y2, color);
- }
+ return SDL_DrawLines(surface, points, count, color);
} else {
- for (i = 1; i < count; ++i) {
- x1 = points[i-1].x - rect.x;
- y1 = points[i-1].y - rect.y;
- x2 = points[i].x - rect.x;
- y2 = points[i].y - rect.y;
-
- status = SDL_BlendLine(&data->surface, x1, y1, x2, y2,
- renderer->blendMode,
- renderer->r, renderer->g, renderer->b,
- renderer->a);
- }
+ return SDL_BlendLines(surface, points, count,
+ renderer->blendMode,
+ renderer->r, renderer->g, renderer->b,
+ renderer->a);
}
-
- data->renderer->UnlockTexture(data->renderer, texture);
-
- return status;
}
static int
SW_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
int count)
{
- SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
- SDL_Texture *texture = SW_ActivateRenderer(renderer);
- SDL_Rect clip, rect;
- Uint32 color = 0;
- int i;
- int status = 0;
+ SDL_Surface *surface = SW_ActivateRenderer(renderer);
- if (!texture) {
+ if (!surface) {
return -1;
}
- clip.x = 0;
- clip.y = 0;
- clip.w = texture->w;
- clip.h = texture->h;
-
if (renderer->blendMode == SDL_BLENDMODE_NONE) {
- color = SDL_MapRGBA(data->surface.format,
- renderer->r, renderer->g, renderer->b,
- renderer->a);
+ Uint32 color = SDL_MapRGBA(surface->format,
+ renderer->r, renderer->g, renderer->b,
+ renderer->a);
+ return SDL_FillRects(surface, rects, count, color);
+ } else {
+ return SDL_BlendFillRects(surface, rects, count,
+ renderer->blendMode,
+ renderer->r, renderer->g, renderer->b,
+ renderer->a);
}
-
- for (i = 0; i < count; ++i) {
- if (!SDL_IntersectRect(rects[i], &clip, &rect)) {
- /* Nothing to draw */
- continue;
- }
-
- if (data->renderer->LockTexture(data->renderer, texture, &rect,
- &data->surface.pixels,
- &data->surface.pitch) < 0) {
- return -1;
- }
-
- data->surface.clip_rect.w = data->surface.w = rect.w;
- data->surface.clip_rect.h = data->surface.h = rect.h;
-
- if (renderer->blendMode == SDL_BLENDMODE_NONE) {
- status = SDL_FillRect(&data->surface, NULL, color);
- } else {
- status = SDL_BlendFillRect(&data->surface, NULL,
- renderer->blendMode,
- renderer->r, renderer->g, renderer->b,
- renderer->a);
- }
-
- data->renderer->UnlockTexture(data->renderer, texture);
- }
- return status;
}
static int
SW_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
const SDL_Rect * srcrect, const SDL_Rect * dstrect)
{
- SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
- SDL_Surface *surface;
- SDL_Rect real_srcrect;
- SDL_Rect real_dstrect;
- int status;
+ SDL_Surface *surface = SW_ActivateRenderer(renderer);
+ SDL_Surface *src = (SDL_Surface *) texture->driverdata;
+ SDL_Rect final_rect = *dstrect;
- if (!SW_ActivateRenderer(renderer)) {
+ if (!surface) {
return -1;
}
-
- if (data->renderer->LockTexture(data->renderer, data->texture, dstrect,
- &data->surface.pixels,
- &data->surface.pitch) < 0) {
- return -1;
- }
-
- surface = (SDL_Surface *) texture->driverdata;
- real_srcrect = *srcrect;
-
- data->surface.w = dstrect->w;
- data->surface.h = dstrect->h;
- data->surface.clip_rect.w = dstrect->w;
- data->surface.clip_rect.h = dstrect->h;
- real_dstrect = data->surface.clip_rect;
-
- status = SDL_LowerBlit(surface, &real_srcrect, &data->surface, &real_dstrect);
- data->renderer->UnlockTexture(data->renderer, data->texture);
- return status;
+ return SDL_BlitSurface(src, srcrect, surface, &final_rect);
}
static int
SW_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
Uint32 format, void * pixels, int pitch)
{
- SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
+ SDL_Surface *surface = SW_ActivateRenderer(renderer);
+ Uint32 src_format;
+ void *src_pixels;
- if (!SW_ActivateRenderer(renderer)) {
+ if (!surface) {
return -1;
}
- if (data->renderer->LockTexture(data->renderer, data->texture, rect,
- &data->surface.pixels,
- &data->surface.pitch) < 0) {
+ if (rect->x < 0 || rect->x+rect->w > surface->w ||
+ rect->y < 0 || rect->y+rect->h > surface->h) {
+ SDL_SetError("Tried to read outside of surface bounds");
return -1;
}
- SDL_ConvertPixels(rect->w, rect->h,
- data->format, data->surface.pixels, data->surface.pitch,
- format, pixels, pitch);
+ src_format = SDL_MasksToPixelFormatEnum(
+ surface->format->BitsPerPixel,
+ surface->format->Rmask, surface->format->Gmask,
+ surface->format->Bmask, surface->format->Amask);
- data->renderer->UnlockTexture(data->renderer, data->texture);
- return 0;
+ src_pixels = (void*)((Uint8 *) surface->pixels +
+ rect->y * surface->pitch +
+ rect->x * surface->format->BytesPerPixel);
+
+ return SDL_ConvertPixels(rect->w, rect->h,
+ src_format, src_pixels, surface->pitch,
+ format, pixels, pitch);
}
static void
SW_RenderPresent(SDL_Renderer * renderer)
{
SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
- SDL_Texture *texture = SW_ActivateRenderer(renderer);
- SDL_Rect rect;
+ SDL_Window *window = renderer->window;
- if (!texture) {
- return;
+ if (window) {
+ SDL_UpdateWindowSurface(window);
}
-
- /* Send the data to the display */
- rect.x = 0;
- rect.y = 0;
- rect.w = texture->w;
- rect.h = texture->h;
- data->renderer->RenderCopy(data->renderer, texture, &rect, &rect);
- data->renderer->RenderPresent(data->renderer);
}
static void
@@ -628,18 +408,8 @@ static void
SW_DestroyRenderer(SDL_Renderer * renderer)
{
SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
- SDL_Window *window = renderer->window;
if (data) {
- if (data->texture) {
- DestroyTexture(data->renderer, data->texture);
- }
- if (data->surface.format) {
- SDL_FreeFormat(data->surface.format);
- }
- if (data->renderer) {
- data->renderer->DestroyRenderer(data->renderer);
- }
SDL_free(data);
}
SDL_free(renderer);
diff --git a/src/render/software/SDL_renderer_sw_c.h b/src/render/software/SDL_renderer_sw_c.h
new file mode 100644
index 000000000..be975cafa
--- /dev/null
+++ b/src/render/software/SDL_renderer_sw_c.h
@@ -0,0 +1,25 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997-2010 Sam Lantinga
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Sam Lantinga
+ slouken@libsdl.org
+*/
+
+extern SDL_Renderer * SW_CreateRendererForSurface(SDL_Surface * surface);
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/video/SDL_sysvideo.h b/src/video/SDL_sysvideo.h
index 75d5d9fcb..3e14224c1 100644
--- a/src/video/SDL_sysvideo.h
+++ b/src/video/SDL_sysvideo.h
@@ -80,6 +80,8 @@ struct SDL_Window
SDL_DisplayMode fullscreen_mode;
+ SDL_Surface *surface;
+
SDL_WindowShaper *shaper;
SDL_WindowUserData *data;
@@ -190,7 +192,10 @@ struct SDL_VideoDevice
void (*RestoreWindow) (_THIS, SDL_Window * window);
void (*SetWindowGrab) (_THIS, SDL_Window * window);
void (*DestroyWindow) (_THIS, SDL_Window * window);
-
+ int (*CreateWindowFramebuffer) (_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch);
+ int (*UpdateWindowFramebuffer) (_THIS, SDL_Window * window, int numrects, SDL_Rect * rects);
+ void (*DestroyWindowFramebuffer) (_THIS, SDL_Window * window);
+
/* * * */
/*
* Shaped-window functions
@@ -344,6 +349,7 @@ extern int SDL_RecreateWindow(SDL_Window * window, Uint32 flags);
extern void SDL_OnWindowShown(SDL_Window * window);
extern void SDL_OnWindowHidden(SDL_Window * window);
+extern void SDL_OnWindowResized(SDL_Window * window);
extern void SDL_OnWindowMinimized(SDL_Window * window);
extern void SDL_OnWindowRestored(SDL_Window * window);
extern void SDL_OnWindowFocusGained(SDL_Window * window);
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index d4ec06e84..e88f081da 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -95,6 +95,130 @@ static SDL_VideoDevice *_this = NULL;
/* Various local functions */
static void SDL_UpdateWindowGrab(SDL_Window * window);
+/* Support for framebuffer emulation using an accelerated renderer */
+
+#define SDL_WINDOWTEXTUREDATA "_SDL_WindowTextureData"
+
+typedef struct {
+ SDL_Renderer *renderer;
+ SDL_Texture *texture;
+ void *pixels;
+ int pitch;
+} SDL_WindowTextureData;
+
+static int
+SDL_CreateWindowTexture(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch)
+{
+ SDL_WindowTextureData *data;
+ SDL_Renderer *renderer;
+ SDL_RendererInfo info;
+ Uint32 i;
+
+ data = SDL_GetWindowData(window, SDL_WINDOWTEXTUREDATA);
+ if (!data) {
+ data = (SDL_WindowTextureData *)SDL_calloc(1, sizeof(*data));
+ if (!data) {
+ SDL_OutOfMemory();
+ return -1;
+ }
+ SDL_SetWindowData(window, SDL_WINDOWTEXTUREDATA, data);
+ }
+
+ renderer = data->renderer;
+ if (!renderer) {
+ renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
+ if (!renderer) {
+ return -1;
+ }
+ data->renderer = renderer;
+ }
+
+ /* Free any old texture and pixel data */
+ if (data->texture) {
+ SDL_DestroyTexture(data->texture);
+ data->texture = NULL;
+ }
+ if (data->pixels) {
+ SDL_free(data->pixels);
+ data->pixels = NULL;
+ }
+
+ if (SDL_GetRendererInfo(renderer, &info) < 0) {
+ return -1;
+ }
+
+ /* Find the first format without an alpha channel */
+ *format = info.texture_formats[0];
+ for (i = 0; i < info.num_texture_formats; ++i) {
+ if (!SDL_ISPIXELFORMAT_ALPHA(info.texture_formats[i])) {
+ *format = info.texture_formats[i];
+ break;
+ }
+ }
+
+ data->texture = SDL_CreateTexture(renderer, *format,
+ SDL_TEXTUREACCESS_STREAMING,
+ window->w, window->h);
+ if (!data->texture) {
+ return -1;
+ }
+
+ /* Create framebuffer data */
+ data->pitch = (((window->w * SDL_BYTESPERPIXEL(*format)) + 3) & ~3);
+ data->pixels = SDL_malloc(window->h * data->pitch);
+ if (!data->pixels) {
+ SDL_OutOfMemory();
+ return -1;
+ }
+
+ *pixels = data->pixels;
+ *pitch = data->pitch;
+ return 0;
+}
+
+static int
+SDL_UpdateWindowTexture(_THIS, SDL_Window * window, int numrects, SDL_Rect * rects)
+{
+ SDL_WindowTextureData *data;
+
+ data = SDL_GetWindowData(window, SDL_WINDOWTEXTUREDATA);
+ if (!data || !data->texture) {
+ SDL_SetError("No window texture data");
+ return -1;
+ }
+
+ if (SDL_UpdateTexture(data->texture, NULL, data->pixels, data->pitch) < 0) {
+ return -1;
+ }
+ if (SDL_RenderCopy(data->renderer, data->texture, NULL, NULL) < 0) {
+ return -1;
+ }
+ SDL_RenderPresent(data->renderer);
+ return 0;
+}
+
+static void
+SDL_DestroyWindowTexture(_THIS, SDL_Window * window)
+{
+ SDL_WindowTextureData *data;
+
+ data = SDL_SetWindowData(window, SDL_WINDOWTEXTUREDATA, NULL);
+ if (!data) {
+ return;
+ }
+ if (data->texture) {
+ SDL_DestroyTexture(data->texture);
+ }
+ if (data->renderer) {
+ SDL_DestroyRenderer(data->renderer);
+ }
+ if (data->pixels) {
+ SDL_free(data->pixels);
+ }
+ SDL_free(data);
+}
+
+
static int
cmpmodes(const void *A, const void *B)
{
@@ -228,6 +352,7 @@ SDL_VideoInit(const char *driver_name)
SDL_VideoQuit();
return -1;
}
+
/* Make sure some displays were added */
if (_this->num_displays == 0) {
SDL_SetError("The video driver did not add any displays");
@@ -235,6 +360,13 @@ SDL_VideoInit(const char *driver_name)
return (-1);
}
+ /* Add the renderer framebuffer emulation if needed */
+ if (!_this->CreateWindowFramebuffer) {
+ _this->CreateWindowFramebuffer = SDL_CreateWindowTexture;
+ _this->UpdateWindowFramebuffer = SDL_UpdateWindowTexture;
+ _this->DestroyWindowFramebuffer = SDL_DestroyWindowTexture;
+ }
+
/* We're ready to go! */
return 0;
}
@@ -1216,6 +1348,69 @@ SDL_SetWindowFullscreen(SDL_Window * window, int fullscreen)
return 0;
}
+static SDL_Surface *
+SDL_CreateWindowFramebuffer(SDL_Window * window)
+{
+ Uint32 format;
+ void *pixels;
+ int pitch;
+ int bpp;
+ Uint32 Rmask, Gmask, Bmask, Amask;
+
+ if (!_this->CreateWindowFramebuffer || !_this->UpdateWindowFramebuffer) {
+ return NULL;
+ }
+
+ if (_this->CreateWindowFramebuffer(_this, window, &format, &pixels, &pitch) < 0) {
+ return NULL;
+ }
+
+ if (!SDL_PixelFormatEnumToMasks(format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) {
+ return NULL;
+ }
+
+ return SDL_CreateRGBSurfaceFrom(pixels, window->w, window->h, bpp, pitch, Rmask, Gmask, Bmask, Amask);
+}
+
+SDL_Surface *
+SDL_GetWindowSurface(SDL_Window * window)
+{
+ CHECK_WINDOW_MAGIC(window, NULL);
+
+ if (!window->surface) {
+ window->surface = SDL_CreateWindowFramebuffer(window);
+ }
+ return window->surface;
+}
+
+int
+SDL_UpdateWindowSurface(SDL_Window * window)
+{
+ SDL_Rect full_rect;
+
+ CHECK_WINDOW_MAGIC(window, -1);
+
+ full_rect.x = 0;
+ full_rect.y = 0;
+ full_rect.w = window->w;
+ full_rect.h = window->h;
+ return SDL_UpdateWindowSurfaceRects(window, 1, &full_rect);
+}
+
+int
+SDL_UpdateWindowSurfaceRects(SDL_Window * window,
+ int numrects, SDL_Rect * rects)
+{
+ CHECK_WINDOW_MAGIC(window, -1);
+
+ if (!window->surface) {
+ SDL_SetError("Window surface is invalid, please call SDL_GetWindowSurface() to get a new surface");
+ return -1;
+ }
+
+ return _this->UpdateWindowFramebuffer(_this, window, numrects, rects);
+}
+
void
SDL_SetWindowGrab(SDL_Window * window, int mode)
{
@@ -1261,6 +1456,15 @@ SDL_OnWindowHidden(SDL_Window * window)
SDL_UpdateFullscreenMode(window, SDL_FALSE);
}
+void
+SDL_OnWindowResized(SDL_Window * window)
+{
+ if (window->surface) {
+ SDL_FreeSurface(window->surface);
+ window->surface = NULL;
+ }
+}
+
void
SDL_OnWindowMinimized(SDL_Window * window)
{
@@ -1336,6 +1540,9 @@ SDL_DestroyWindow(SDL_Window * window)
/* Restore video mode, etc. */
SDL_UpdateFullscreenMode(window, SDL_FALSE);
+ if (_this->DestroyWindowFramebuffer) {
+ _this->DestroyWindowFramebuffer(_this, window);
+ }
if (_this->DestroyWindow) {
_this->DestroyWindow(_this, window);
}
diff --git a/src/video/dummy/SDL_nullframebuffer.c b/src/video/dummy/SDL_nullframebuffer.c
new file mode 100755
index 000000000..e7c57510a
--- /dev/null
+++ b/src/video/dummy/SDL_nullframebuffer.c
@@ -0,0 +1,90 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997-2010 Sam Lantinga
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Sam Lantinga
+ slouken@libsdl.org
+*/
+#include "SDL_config.h"
+
+#include "../SDL_sysvideo.h"
+
+
+#define DUMMY_SURFACE "_SDL_DummySurface"
+
+int SDL_DUMMY_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch)
+{
+ SDL_Surface *surface;
+ const Uint32 surface_format = SDL_PIXELFORMAT_RGB888;
+ int w, h;
+ int bpp;
+ Uint32 Rmask, Gmask, Bmask, Amask;
+
+ /* Free the old framebuffer surface */
+ surface = (SDL_Surface *) SDL_GetWindowData(window, DUMMY_SURFACE);
+ if (surface) {
+ SDL_FreeSurface(surface);
+ }
+
+ /* Create a new one */
+ SDL_PixelFormatEnumToMasks(surface_format, &bpp, &Rmask, &Gmask, &Bmask, &Amask);
+ SDL_GetWindowSize(window, &w, &h);
+ surface = SDL_CreateRGBSurface(0, w, h, bpp, Rmask, Gmask, Bmask, Amask);
+ if (!surface) {
+ return -1;
+ }
+
+ /* Save the info and return! */
+ SDL_SetWindowData(window, DUMMY_SURFACE, surface);
+ *format = surface_format;
+ *pixels = surface->pixels;
+ *pitch = surface->pitch;
+ return 0;
+}
+
+int SDL_DUMMY_UpdateWindowFramebuffer(_THIS, SDL_Window * window, int numrects, SDL_Rect * rects)
+{
+ static int frame_number;
+ SDL_Surface *surface;
+
+ surface = (SDL_Surface *) SDL_GetWindowData(window, DUMMY_SURFACE);
+ if (!surface) {
+ SDL_SetError("Couldn't find dummy surface for window");
+ return -1;
+ }
+
+ /* Send the data to the display */
+ if (SDL_getenv("SDL_VIDEO_DUMMY_SAVE_FRAMES")) {
+ char file[128];
+ SDL_snprintf(file, sizeof(file), "SDL_window%d-%8.8d.bmp",
+ SDL_GetWindowID(window), ++frame_number);
+ SDL_SaveBMP(surface, file);
+ }
+ return 0;
+}
+
+void SDL_DUMMY_DestroyWindowFramebuffer(_THIS, SDL_Window * window)
+{
+ SDL_Surface *surface;
+
+ surface = (SDL_Surface *) SDL_SetWindowData(window, DUMMY_SURFACE, NULL);
+ if (surface) {
+ SDL_FreeSurface(surface);
+ }
+}
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/video/dummy/SDL_nullframebuffer_c.h b/src/video/dummy/SDL_nullframebuffer_c.h
new file mode 100644
index 000000000..5c8056e70
--- /dev/null
+++ b/src/video/dummy/SDL_nullframebuffer_c.h
@@ -0,0 +1,28 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997-2010 Sam Lantinga
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ Sam Lantinga
+ slouken@libsdl.org
+*/
+#include "SDL_config.h"
+
+extern int SDL_DUMMY_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch);
+extern int SDL_DUMMY_UpdateWindowFramebuffer(_THIS, SDL_Window * window, int numrects, SDL_Rect * rects);
+extern void SDL_DUMMY_DestroyWindowFramebuffer(_THIS, SDL_Window * window);
+
+/* vi: set ts=4 sw=4 expandtab: */
diff --git a/src/video/dummy/SDL_nullvideo.c b/src/video/dummy/SDL_nullvideo.c
index e279e167a..1ecf1ada1 100644
--- a/src/video/dummy/SDL_nullvideo.c
+++ b/src/video/dummy/SDL_nullvideo.c
@@ -44,6 +44,7 @@
#include "SDL_nullvideo.h"
#include "SDL_nullevents_c.h"
+#include "SDL_nullframebuffer_c.h"
#define DUMMYVID_DRIVER_NAME "dummy"
@@ -91,6 +92,9 @@ DUMMY_CreateDevice(int devindex)
device->VideoQuit = DUMMY_VideoQuit;
device->SetDisplayMode = DUMMY_SetDisplayMode;
device->PumpEvents = DUMMY_PumpEvents;
+ device->CreateWindowFramebuffer = SDL_DUMMY_CreateWindowFramebuffer;
+ device->UpdateWindowFramebuffer = SDL_DUMMY_UpdateWindowFramebuffer;
+ device->DestroyWindowFramebuffer = SDL_DUMMY_DestroyWindowFramebuffer;
device->free = DUMMY_DeleteDevice;