Hi Phil,
Unfortunately no. DirectX and SDL are quite a bit different in lots of ways that would make it difficult to support DirectX and SDL at the same time. For example, take something simple like panning a sound to the left or right. DirectSound and SDL Mixer have two completely different methods of handling this. In DirectX DirectSound to pan a sound you merely need to pass the pan control a value from -10000, max left, to 10000, max right. It would look something like this.

// Center the sound in the right speaker.
sound.Pan = 5000;

SDL Mixer doesn't do it that way. You pan sounds by controling the stereo channels independantly of each other. Each channel has a range of 0, silence, to 250, full volume. Anyway, to do what I did above using the SDL Audio support it would look like this.

// Center the sound in the right speaker.
channel.SetPanning(0, 125);

Obviously, the two methods aren't remotely similar, and this is a fairly miner procedure all things considered. When we get into subjects like SDL Input vs DirectInput we are comparing apples and oranges. In my personal opinion SDL input support is much easier to work with than DirectX. Even though SDL Input doesn't yet support force feedback I rather like how they handle joysticks, game pads, and stearing wheels on the Windows side. It is much easier to work with than DirectInput by a long shot. To enable a joystick using SDL Input all I need to do is add the following lines to my engine.

Events.JoystickAxisMotion +=
new EventHandler<JoystickAxisEventArgs>(this.JoystickAxisChanged);
Events.JoystickButtonDown += new EventHandler<JoystickButtonEventArgs>(this.JoystickButtonDown);
joystick = Joysticks.OpenJoystick(0);

This is infinitely easier and less complicated than the way I would do it using DirectInput. With DirectInput to do the same thing it would look something like this.

// Attempt to locate a compatible joystick/game pad.
foreach (DeviceInstance instance in Manager.GetDevices(DeviceClass.GameControl,

// Grab the first game controller we find.
joystick = new Microsoft.DirectX.DirectInput.Device(instance.InstanceGuid);

// Exit the loop.

// If we found a joystick
// proceed with initialization.
if (joystick != null)

// Initialize joystick state object.
stickstate = new JoystickState();

// Setup button state array.
buttons = new bool[12];

// Set joystick data format.

// Set the cooperative level.
joystick.SetCooperativeLevel(this, CooperativeLevelFlags.Background |

// Set the axis range.
// Normally a range of 10000 is standard
// for most joystick and game pad devices.
foreach (DeviceObjectInstance doi in joystick.Objects)

// If the joystick axis is not 0
// set it to 5000 units per stick direction.
if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0)

// Set axis range.
doi.ObjectId, new InputRange(-5000, 5000));

// Set joystick axis flag.
joystick.Properties.AxisModeAbsolute = true;

// Aquire the joystick for use.

// If initialization failed
// set joystick to null
// and continue with normal operation.
joystick = null;

Smile. That is just a strait grab any joystick we see piece of code using DirectX. That doesn't have any special features like force feedback or some of the more advanced features of DirectInput. As you can see from a programming point of view DirectX is infinitely more complicated and not at all compatible with SDL. Part of the reason I made the switch is SDL is much much easier to learn, use, and it supports Mac OS and Linux as well as Windows. I think eventually switching to it will pay off as it has its own advantages/disadvantages here.

Gamers mailing list __ Gamers@audyssey.org
If you want to leave the list, send E-mail to gamers-unsubscr...@audyssey.org.
You can make changes or update your subscription via the web, at
All messages are archived and can be searched and read at
If you have any questions or concerns regarding the management of the list,
please send E-mail to gamers-ow...@audyssey.org.

Reply via email to