diff --git a/CSFML/build/VC2008/csfml-graphics-d.def b/CSFML/build/VC2008/csfml-graphics-d.def index 8f3f26a94..c46662c9d 100644 --- a/CSFML/build/VC2008/csfml-graphics-d.def +++ b/CSFML/build/VC2008/csfml-graphics-d.def @@ -171,6 +171,7 @@ EXPORTS sfRenderImage_GetWidth sfRenderImage_GetHeight sfRenderImage_SetActive + sfRenderImage_Flush sfRenderImage_DrawPostFX sfRenderImage_DrawSprite sfRenderImage_DrawShape @@ -200,6 +201,7 @@ EXPORTS sfRenderWindow_EnableKeyRepeat sfRenderWindow_SetIcon sfRenderWindow_SetActive + sfRenderWindow_Flush sfRenderWindow_Display sfRenderWindow_GetInput sfRenderWindow_SetFramerateLimit @@ -209,7 +211,6 @@ EXPORTS sfRenderWindow_DrawSprite sfRenderWindow_DrawString sfRenderWindow_DrawShape - sfRenderWindow_Capture sfRenderWindow_Clear sfRenderWindow_SetView sfRenderWindow_GetView diff --git a/CSFML/build/VC2008/csfml-graphics.def b/CSFML/build/VC2008/csfml-graphics.def index ac594420e..d5a93a5bc 100644 --- a/CSFML/build/VC2008/csfml-graphics.def +++ b/CSFML/build/VC2008/csfml-graphics.def @@ -171,6 +171,7 @@ EXPORTS sfRenderImage_GetWidth sfRenderImage_GetHeight sfRenderImage_SetActive + sfRenderImage_Flush sfRenderImage_DrawPostFX sfRenderImage_DrawSprite sfRenderImage_DrawShape @@ -201,6 +202,7 @@ EXPORTS sfRenderWindow_EnableKeyRepeat sfRenderWindow_SetIcon sfRenderWindow_SetActive + sfRenderWindow_Flush sfRenderWindow_Display sfRenderWindow_GetInput sfRenderWindow_SetFramerateLimit @@ -210,7 +212,6 @@ EXPORTS sfRenderWindow_DrawSprite sfRenderWindow_DrawString sfRenderWindow_DrawShape - sfRenderWindow_Capture sfRenderWindow_Clear sfRenderWindow_SetView sfRenderWindow_GetView diff --git a/CSFML/include/SFML/Graphics/RenderImage.h b/CSFML/include/SFML/Graphics/RenderImage.h index ffbbda1cc..6478edc1b 100644 --- a/CSFML/include/SFML/Graphics/RenderImage.h +++ b/CSFML/include/SFML/Graphics/RenderImage.h @@ -83,6 +83,24 @@ CSFML_API unsigned int sfRenderImage_GetHeight(sfRenderImage* renderImage); //////////////////////////////////////////////////////////// CSFML_API sfBool sfRenderImage_SetActive(sfRenderImage* renderImage, sfBool active); +//////////////////////////////////////////////////////////// +/// Make sure that what has been drawn so far is rendered +/// +/// Use this function if you use OpenGL rendering commands, +/// and you want to make sure that things will appear on top +/// of all the SFML objects that have been drawn so far. +/// This is needed because SFML doesn't use immediate rendering, +/// it first accumulates drawables into a queue and +/// trigger the actual rendering afterwards. +/// +/// You don't need to call this function if you're not +/// dealing with OpenGL directly. +/// +/// \param Renderimage : Renderwindow object +/// +//////////////////////////////////////////////////////////// +CSFML_API void sfRenderImage_Flush(sfRenderImage* renderImage); + //////////////////////////////////////////////////////////// /// Draw something on a renderimage /// diff --git a/CSFML/include/SFML/Graphics/RenderWindow.h b/CSFML/include/SFML/Graphics/RenderWindow.h index 2124a7e9c..e31a79528 100644 --- a/CSFML/include/SFML/Graphics/RenderWindow.h +++ b/CSFML/include/SFML/Graphics/RenderWindow.h @@ -213,6 +213,24 @@ CSFML_API void sfRenderWindow_SetIcon(sfRenderWindow* renderWindow, unsigned int //////////////////////////////////////////////////////////// CSFML_API sfBool sfRenderWindow_SetActive(sfRenderWindow* renderWindow, sfBool active); +//////////////////////////////////////////////////////////// +/// Make sure that what has been drawn so far is rendered +/// +/// Use this function if you use OpenGL rendering commands, +/// and you want to make sure that things will appear on top +/// of all the SFML objects that have been drawn so far. +/// This is needed because SFML doesn't use immediate rendering, +/// it first accumulates drawables into a queue and +/// trigger the actual rendering afterwards. +/// +/// You don't need to call this function if you're not +/// dealing with OpenGL directly. +/// +/// \param renderWindow : Renderwindow object +/// +//////////////////////////////////////////////////////////// +CSFML_API void sfRenderWindow_Flush(sfRenderWindow* renderWindow); + //////////////////////////////////////////////////////////// /// Display a window on screen /// @@ -272,16 +290,6 @@ CSFML_API void sfRenderWindow_DrawSprite(sfRenderWindow* renderWindow, sfSprite* CSFML_API void sfRenderWindow_DrawShape (sfRenderWindow* renderWindow, sfShape* shape); CSFML_API void sfRenderWindow_DrawString(sfRenderWindow* renderWindow, sfString* string); -//////////////////////////////////////////////////////////// -/// Save the content of a renderwindow to an image -/// -/// \param renderWindow : Renderwindow to capture -/// -/// \return Image instance containing the contents of the screen -/// -//////////////////////////////////////////////////////////// -CSFML_API sfImage* sfRenderWindow_Capture(sfRenderWindow* renderWindow); - //////////////////////////////////////////////////////////// /// Clear the screen with the given color /// diff --git a/CSFML/src/SFML/Graphics/RenderImage.cpp b/CSFML/src/SFML/Graphics/RenderImage.cpp index 49e12f87a..f158f9d54 100644 --- a/CSFML/src/SFML/Graphics/RenderImage.cpp +++ b/CSFML/src/SFML/Graphics/RenderImage.cpp @@ -87,6 +87,28 @@ sfBool sfRenderImage_SetActive(sfRenderImage* renderImage, sfBool active) } +//////////////////////////////////////////////////////////// +/// Make sure that what has been drawn so far is rendered +/// +/// Use this function if you use OpenGL rendering commands, +/// and you want to make sure that things will appear on top +/// of all the SFML objects that have been drawn so far. +/// This is needed because SFML doesn't use immediate rendering, +/// it first accumulates drawables into a queue and +/// trigger the actual rendering afterwards. +/// +/// You don't need to call this function if you're not +/// dealing with OpenGL directly. +/// +/// \param Renderimage : Renderwindow object +/// +//////////////////////////////////////////////////////////// +void sfRenderImage_Flush(sfRenderImage* renderImage) +{ + CSFML_CALL(renderImage, Flush()) +} + + //////////////////////////////////////////////////////////// /// Draw something on a renderimage //////////////////////////////////////////////////////////// diff --git a/CSFML/src/SFML/Graphics/RenderWindow.cpp b/CSFML/src/SFML/Graphics/RenderWindow.cpp index e80393e29..e919c9395 100644 --- a/CSFML/src/SFML/Graphics/RenderWindow.cpp +++ b/CSFML/src/SFML/Graphics/RenderWindow.cpp @@ -292,6 +292,26 @@ sfBool sfRenderWindow_SetActive(sfRenderWindow* renderWindow, sfBool active) } +//////////////////////////////////////////////////////////// +/// Make sure that what has been drawn so far is rendered +/// +/// Use this function if you use OpenGL rendering commands, +/// and you want to make sure that things will appear on top +/// of all the SFML objects that have been drawn so far. +/// This is needed because SFML doesn't use immediate rendering, +/// it first accumulates drawables into a queue and +/// trigger the actual rendering afterwards. +/// +/// You don't need to call this function if you're not +/// dealing with OpenGL directly. +/// +//////////////////////////////////////////////////////////// +void sfRenderWindow_Flush(sfRenderWindow* renderWindow) +{ + CSFML_CALL(renderWindow, Flush()) +} + + //////////////////////////////////////////////////////////// /// Display a window on screen //////////////////////////////////////////////////////////// @@ -365,19 +385,6 @@ void sfRenderWindow_DrawString(sfRenderWindow* renderWindow, sfString* string) } -//////////////////////////////////////////////////////////// -/// Save the content of a renderwindow to an image -//////////////////////////////////////////////////////////// -sfImage* sfRenderWindow_Capture(sfRenderWindow* renderWindow) -{ - CSFML_CHECK_RETURN(renderWindow, NULL); - - sfImage* image = new sfImage; - *image->This = renderWindow->This.Capture(); - - return image; -} - //////////////////////////////////////////////////////////// /// Clear the screen with the given color //////////////////////////////////////////////////////////// diff --git a/dotnet/extlibs/csfml-audio.dll b/dotnet/extlibs/csfml-audio.dll index 341c7a09d..30d42053a 100644 Binary files a/dotnet/extlibs/csfml-audio.dll and b/dotnet/extlibs/csfml-audio.dll differ diff --git a/dotnet/extlibs/csfml-graphics.dll b/dotnet/extlibs/csfml-graphics.dll index 410a6af00..01268cd00 100644 Binary files a/dotnet/extlibs/csfml-graphics.dll and b/dotnet/extlibs/csfml-graphics.dll differ diff --git a/dotnet/extlibs/csfml-window.dll b/dotnet/extlibs/csfml-window.dll index 3e7ab0c0e..4491b12a4 100644 Binary files a/dotnet/extlibs/csfml-window.dll and b/dotnet/extlibs/csfml-window.dll differ diff --git a/dotnet/samples/opengl/OpenGL.cs b/dotnet/samples/opengl/OpenGL.cs index 85ae76b5f..449de17c4 100644 --- a/dotnet/samples/opengl/OpenGL.cs +++ b/dotnet/samples/opengl/OpenGL.cs @@ -16,6 +16,9 @@ namespace sample_opengl // Create main window RenderWindow window = new RenderWindow(new VideoMode(800, 600), "SFML.Net OpenGL"); + // Activate it as the target for OpenGL calls + window.SetActive(); + // Setup event handlers window.Closed += new EventHandler(OnClosed); window.KeyPressed += new EventHandler(OnKeyPressed); @@ -72,6 +75,13 @@ namespace sample_opengl // Draw background window.Draw(background); + // Flush the window, to make sure that our OpenGL cube + // will be rendered on top of the background sprite + window.Flush(); + + // Activate the window for OpenGL calls + window.SetActive(); + // Clear depth buffer Gl.glClear(Gl.GL_DEPTH_BUFFER_BIT); @@ -159,6 +169,8 @@ namespace sample_opengl /// static void OnResized(object sender, SizeEventArgs e) { + RenderWindow window = (RenderWindow)sender; + window.SetActive(); Gl.glViewport(0, 0, (int)e.Width, (int)e.Height); } } diff --git a/dotnet/samples/window/Window.cs b/dotnet/samples/window/Window.cs index 6c5d44f80..e894824bc 100644 --- a/dotnet/samples/window/Window.cs +++ b/dotnet/samples/window/Window.cs @@ -15,6 +15,9 @@ namespace sample_window // Create the main window Window window = new Window(new VideoMode(640, 480, 32), "SFML.Net Window"); + // Activate it as the target for OpenGL calls + window.SetActive(); + // Setup event handlers window.Closed += new EventHandler(OnClosed); window.KeyPressed += new EventHandler(OnKeyPressed); @@ -42,8 +45,6 @@ namespace sample_window window.DispatchEvents(); // Set the active window before using OpenGL commands - // It's useless here because the active window is always the same, - // but don't forget it if you use multiple windows window.SetActive(); // Clear color and depth buffer @@ -128,6 +129,8 @@ namespace sample_window /// static void OnResized(object sender, SizeEventArgs e) { + Window window = (Window)sender; + window.SetActive(); Gl.glViewport(0, 0, (int)e.Width, (int)e.Height); } } diff --git a/dotnet/src/Graphics/RenderImage.cs b/dotnet/src/Graphics/RenderImage.cs index d134bde2d..646406dc9 100644 --- a/dotnet/src/Graphics/RenderImage.cs +++ b/dotnet/src/Graphics/RenderImage.cs @@ -191,6 +191,26 @@ namespace SFML sfRenderImage_DrawPostFX(This, postFx != null ? postFx.This : IntPtr.Zero); } + //////////////////////////////////////////////////////////// + /// + /// Make sure that what has been drawn so far is rendered. + /// + /// Use this function if you use OpenGL rendering commands, + /// and you want to make sure that things will appear on top + /// of all the SFML objects that have been drawn so far. + /// This is needed because SFML doesn't use immediate rendering, + /// it first accumulates drawables into a queue and + /// trigger the actual rendering afterwards. + /// + /// You don't need to call this function if you're not + /// dealing with OpenGL directly. + /// + //////////////////////////////////////////////////////////// + public void Flush() + { + sfRenderImage_Flush(This); + } + //////////////////////////////////////////////////////////// /// /// Target image of the render image @@ -257,6 +277,9 @@ namespace SFML [DllImport("csfml-graphics"), SuppressUnmanagedCodeSecurity] static extern bool sfRenderImage_SetActive(IntPtr This, bool Active); + [DllImport("csfml-graphics"), SuppressUnmanagedCodeSecurity] + static extern bool sfRenderImage_Flush(IntPtr This); + [DllImport("csfml-graphics"), SuppressUnmanagedCodeSecurity] static extern void sfRenderImage_SetView(IntPtr This, IntPtr View); diff --git a/dotnet/src/Graphics/RenderTarget.cs b/dotnet/src/Graphics/RenderTarget.cs index bd675e052..26698fbcb 100644 --- a/dotnet/src/Graphics/RenderTarget.cs +++ b/dotnet/src/Graphics/RenderTarget.cs @@ -59,7 +59,6 @@ namespace SFML /// X coordinate of the point to convert, relative to the target /// Y coordinate of the point to convert, relative to the target /// Converted point - /// //////////////////////////////////////////////////////////// Vector2 ConvertCoords(uint x, uint y); @@ -72,7 +71,6 @@ namespace SFML /// Y coordinate of the point to convert, relative to the target /// Target view to convert the point to /// Converted point - /// //////////////////////////////////////////////////////////// Vector2 ConvertCoords(uint x, uint y, View view); @@ -106,6 +104,23 @@ namespace SFML /// PostFx to apply //////////////////////////////////////////////////////////// void Draw(PostFx postFx); + + //////////////////////////////////////////////////////////// + /// + /// Make sure that what has been drawn so far is rendered. + /// + /// Use this function if you use OpenGL rendering commands, + /// and you want to make sure that things will appear on top + /// of all the SFML objects that have been drawn so far. + /// This is needed because SFML doesn't use immediate rendering, + /// it first accumulates drawables into a queue and + /// trigger the actual rendering afterwards. + /// + /// You don't need to call this function if you're not + /// dealing with OpenGL directly. + /// + //////////////////////////////////////////////////////////// + void Flush(); } } } diff --git a/dotnet/src/Graphics/RenderWindow.cs b/dotnet/src/Graphics/RenderWindow.cs index f56a85147..753f0af52 100644 --- a/dotnet/src/Graphics/RenderWindow.cs +++ b/dotnet/src/Graphics/RenderWindow.cs @@ -382,17 +382,6 @@ namespace SFML sfRenderWindow_Clear(This, color); } - //////////////////////////////////////////////////////////// - /// - /// Save the content of the window to an image - /// - /// Image instance containing the contents of the screen - //////////////////////////////////////////////////////////// - public Image Capture() - { - return new Image(sfRenderWindow_Capture(This)); - } - //////////////////////////////////////////////////////////// /// /// Draw something into the window @@ -415,6 +404,26 @@ namespace SFML sfRenderWindow_DrawPostFX(This, postFx != null ? postFx.This : IntPtr.Zero); } + //////////////////////////////////////////////////////////// + /// + /// Make sure that what has been drawn so far is rendered. + /// + /// Use this function if you use OpenGL rendering commands, + /// and you want to make sure that things will appear on top + /// of all the SFML objects that have been drawn so far. + /// This is needed because SFML doesn't use immediate rendering, + /// it first accumulates drawables into a queue and + /// trigger the actual rendering afterwards. + /// + /// You don't need to call this function if you're not + /// dealing with OpenGL directly. + /// + //////////////////////////////////////////////////////////// + public void Flush() + { + sfRenderWindow_Flush(This); + } + //////////////////////////////////////////////////////////// /// /// Internal function to get the next event @@ -524,6 +533,9 @@ namespace SFML [DllImport("csfml-graphics"), SuppressUnmanagedCodeSecurity] static extern bool sfRenderWindow_SetActive(IntPtr This, bool Active); + [DllImport("csfml-graphics"), SuppressUnmanagedCodeSecurity] + static extern bool sfRenderWindow_Flush(IntPtr This); + [DllImport("csfml-graphics"), SuppressUnmanagedCodeSecurity] static extern void sfRenderWindow_SetFramerateLimit(IntPtr This, uint Limit); diff --git a/dotnet/src/Window/VideoMode.cs b/dotnet/src/Window/VideoMode.cs index 8dcced9dc..f543a000e 100644 --- a/dotnet/src/Window/VideoMode.cs +++ b/dotnet/src/Window/VideoMode.cs @@ -57,7 +57,7 @@ namespace SFML //////////////////////////////////////////////////////////// /// /// Get the number of valid video modes - /// + /// //////////////////////////////////////////////////////////// public static uint ModesCount { @@ -81,7 +81,7 @@ namespace SFML //////////////////////////////////////////////////////////// /// /// Get the current desktop video mode - /// + /// //////////////////////////////////////////////////////////// public static VideoMode DesktopMode {