SDL.NET is a set of object-oriented CLS-compliant .NET 2.0 bindings for the SDL multimedia library. It provides high-level access to audio, keyboard, mouse, joystick, TrueType fonts, various image formats, sound mixing, MPEG-1 movies, 2D video framebuffer and 3D hardware via OpenGL.
This release fully leverages .NET 2.0 functionality. This release uses the latest SDL library release (1.2.11). The API has been completely revamped with reorganized namespaces, consolidated method names and generics. The Sprite and Audio systems have been revamped. A library that integrates SDL.NET and Gtk# has been added. The OpenGl integration library has been rewritten. Many examples have been added to the new examples browser application.
Documentation and downloads are available at http://cs-sdl.sourceforge.net.
A full changelog can be found at http://cs-sdl.sourceforge.net/index.php/Changelog
SDL.NET is licensed under the LGPL.
David Hudson 05 May 2007
- All examples use a Main() method instead of a Run() method for startup. This eases the re-use of the examples, especially the SimpleExample and Template.
- Updated to use Tao 2.0.0 final release.
David Hudson 20 Apr 2007
- Bioslayer has joined the project.
- Dropped the Winforms-based Example browser. It caused too many problems with Mono (mouse event handling on Mono/Linux and Mono/Windows, compilation and event problems on Mono/OSX).
- Added a SDL.NET-based GUI Example browser. It is clunky, but it works on all platforms.
- At long last, an OSX version. The CDPlayer does not work, but the Examples Browser and SharpNes work. They build full OSX bundles so you can double-click on the apps to start them.
- Released .dmg file for OSX version.
- SdlDotNet.OpenGl was re-implemented thanks to Bioslayer.
- Many bugs fixes by Bioslayer.
- All tutorials on the wiki updated to 6.0 code
- Changed SpriteDictionary to SpriteCollection. Sorting on the Z axis now works.
- Added a small demo to show sorting order for sprites.
- Fixed Sprite.Kill to remove sprite from all collections.
- Updated Prebuild that fixes VS2005 target.
- Requires Mono 184.108.40.206 or .NET 2.0
David Hudson 27 Mar 2007
- Major API Change: Removed Surface.Resize, Surface.Rotate, Surface.Scale, Surface.RotateZoom, Surface.Stretch, Surface.FlipVertical and Surface.FlipHorizontal. You must now use the respective "Create" methods: Surface.CreateResizedSurface, Surface.CreateScaledSurface, Surface.CreateFlippedVerticalSurface etc. I know this is a disruptive change, but it solves a huge AccessViolation memory bug that has been plaguing SDL.NET for a long time.
- SpriteDictionary is now a SortedDictionary.
- Sprites implement IComparable using the Z-axis of the Vector. This allows sprites to be blit in proper order.
- Fixed a threading problem with SurfaceControl.
- Used partial classes with SurfaceControl and CDPlayer demo so they work better in the VS2005 designer.
- Reworked Examples browser to run on Mono. Mono does not like TreeNodes.
- Added shell scripts for Examples to run on Linux.
- Added a Transparent.png resource so that Surface.CreateResizedSurface() works better (thanks to PaulA for the idea).
- Added a constructor to the Music class to load from a byte array.
- Updated to SDL_gfx 2.0.16.
- Added TexturedPolygon primitive (SDL_gfx 2.0.16 only). This can be seen in the PrimitivesExample. This is skipped in the example if an older version of SDL_gfx is present.
- Added SDL.NET port of the SharpNES Nintendo emulator to the examples. The second controller and the sound does not work, but it can run many games. Thanks to Jonathan Turner for the code.
- Improved event handling in SurfaceGtk courtesy of Thomas Krieger
- Added a Gtk Sprite Example courtesy of Thomas Krieger.
- Added scripts to create a debug build.
- TODO: Mono/Windows does not run some examples properly. The CDPlayer will stop working when resized or moved. The SpriteDemo runs out of memory. The MoviePlayer sometimes hangs when exiting. The GtkWindow runs but throws an error that the "assertion `main_loops != NULL' failed".
- TODO: Mono/Linux does not run some examples properly. Midi does not seem to work for the AudioExample. The StreamingExample has some static. SDL windows do not receive mouse events even though the standalone examples (CDPlayer, SharpNes) do. Some NeHe examples use Windows-specific functionality and do not run in Linux. Some examples exit with double-free errors.
- TODO: SDL.NET does not compile under Mono/OSX. resgen.exe fails when trying to process the .resx files.
David Hudson 26 Jan 2007
- Full usage of .NET 2.0 - all Collections use generics now.
- Full FXCop compliance - this caused a lot of rewriting of constructors to prevent subclassing issues.
- Updated to latest version of Tao (2.0RC1)
- EventHandlers are now generics per FXCop.
- SpriteCollection is now SpriteDictionary. The key is the clipped rectangle of the sprite's surface. This functionality is similar to pygame.
- Primitives were given an interface and moved into their own namespace.
- Surface class had many methods renamed - the numerous Primitives ones were consolidated and now use the IPrimitive interface.
- Surface.DrawPixel is now Surface.Draw to make it consistent with the Surface Primitives methods.
- The many Video.SetVideoMode/SetVideoModeWindow/SetVideoModeGl methods were consolidated into one method name with several overloads. This makes the code much more consistent and clean.
- CDDrive.PlayTracks was renamed CDDrive.Play to make it consistent with other methods.
- Sealed classes are now static classes (except SdlDotNet.Core.Events)
- The static methods in the Music class was split into the MusicPlayer class
- AudioStream class has been integrated into the rest of the audio system.
- Sprites now consist of a Surface and a Vector instead of the Surface and Rectangle. Using a rectangle that was different from the Surface.Rectangle caused a lot of confusion, especially with AnimatedSprites. You can use the Vector to give the sprite a Z-axis. This allows the sprites to be blit in Z-order.
- Removed ChannelCollection. Use a generic instead.
- Removed RectanglesCollection. Using a List<Rectangle> instead.
- Removed DirtyRectangles.
- Added SdlDotNet.GtkSharp library (thanks to Drazen Soronda)
- Video.WindowIcon(assembly, iconName) for more customizability when setting the window icon (thanks to Rob Loach)
- Added more axes to JoystickAxis. (thanks to Rob Loach)
- Reorganized namespaces. Instead of One namespace that contained eveything there are now:
- Consolidated all examples (except CDPlayer) into one example browser application.
- Added HeroExample, PongExample, PrimitivesExample, JoystickExample, GtkWindowExample, FontExample.
- Added a window and TextSprite to the StreamAudio example to make it easier to use.
- Removed GuiExample and stripped out the GuiExample components from the SpriteDemo. This had fallen into disrepair in the 4.x era.
- Removed Sprite.Render methods. The different overloads did completely different things. Use Surface.Blit(Sprite) instead.
- Removed Surface.Flip(). use Surface.Update() instead. It actually calls Sdl.SDL_Flip() anyway, but I wanted to consolidate the terminology.
- Many of the string literals now use Resources so they are semi-localized. Note that Monodevelop has a Resource handling bug, so SdlDotNet may not build properly in the IDE. NAnt on Linux works fine however.