En informática, DirectInput es una API de Microsoft heredada [1] para recopilar información de un usuario de computadora, a través de dispositivos de entrada como el mouse , el teclado o un controlador de juegos . También proporciona un sistema de mapeo de acciones, que permite al usuario asignar acciones específicas dentro de un juego a los botones y ejes de los dispositivos de entrada. Además, maneja dispositivos de retroalimentación háptica (entrada / salida). Microsoft introdujo una nueva biblioteca de entrada llamada XInput específicamente para el controlador Xbox 360 .
DirectInput y XInput proporcionan beneficios sobre los eventos de entrada normales de Win32:
- Permiten que una aplicación recupere datos de dispositivos de entrada incluso cuando la aplicación está en segundo plano.
- brindan soporte completo para cualquier tipo de dispositivo de entrada, así como para retroalimentación háptica
- a través del mapeo de acciones , las aplicaciones pueden recuperar datos de entrada sin necesidad de saber qué tipo de dispositivo generó esa entrada
Si bien DirectInput forma parte de la biblioteca de DirectX , no se ha revisado significativamente desde DirectX 8 (2001–2002). Microsoft recomienda que las nuevas aplicaciones utilicen el bucle de mensajes de Windows para la entrada del teclado y el mouse en lugar de DirectInput (como se indica en la presentación de diapositivas de Meltdown 2005 [2] ) y que usen XInput en lugar de DirectInput para los controladores de Xbox 360.
Historia
DirectX incluía DirectInput desde la versión 1.0 (1995). Inicialmente ofrecía soporte real solo para joysticks, ya que los módulos de mouse y teclado simplemente proporcionaban envoltorios a la API Win32 estándar . DirectX versión 3.0 (1996) agregó soporte para teclados y ratones; también mejoró el soporte del joystick. DirectX 5.0 (1997) incluyó una compatibilidad con joystick muy mejorada, incluida la adición de retroalimentación háptica, el aumento del número de botones, el cambio del modelo de controlador de dispositivo subyacente e incorporación de una API basada en COM . La compatibilidad con el mouse también aumentó la cantidad de botones que se ven de cuatro a ocho. En DirectX 7.0 (1999-), DirectInput agregó una característica prometida durante mucho tiempo de ver ratones individuales como joysticks individuales, pero la característica no funcionó con el Windows XP lanzado más tarde , aunque a partir de 2010[actualizar] funciona con Windows 98 / Me y DirectX 9. DirectX 8.0 (2000), la última versión con cambios importantes, incluyó mapas de acciones y soporte más amplio para diferentes tipos de dispositivos.
Si bien Microsoft inicialmente pretendía que DirectInput manejara todas las entradas, no ha resultado de esta manera. A partir de 2011[actualizar]Microsoft no recomienda el uso de DirectInput para teclados o ratones, y ha comenzado a impulsar los nuevos controladores XInput para Xbox 360. [3] En Windows Vista , Windows 7 y versiones posteriores de Windows, se ha eliminado la interfaz de usuario de mapeo de acciones incorporada. [4] DirectInput no está disponible para las aplicaciones de la Tienda Windows.
XInput
XInput, [5] una API para controladores de "próxima generación", se introdujo en diciembre de 2005 junto con el lanzamiento de Xbox 360 . Este conjunto de instrucciones proporcionó soporte completo para los controladores Xbox 360 en Windows XP SP1 y sistemas operativos posteriores, y Microsoft lo describe como más fácil de programar y requiere menos configuración que DirectInput. XInput es compatible con DirectX versión 9 y posteriores.
Soporte del controlador Xbox 360
Un controlador Xbox 360 , con el controlador predeterminado de Microsoft, tiene las siguientes limitaciones con DirectInput, en comparación con XInput:
- los disparadores izquierdo y derecho actuarán como un solo eje que representa la diferencia con signo entre los disparadores, no como ejes analógicos independientes
- los efectos de vibración no funcionarán
- la consulta de dispositivos de auriculares no funcionará
Ninguna de estas limitaciones existe si usa el controlador Xbox 360 con XInput. [6]
Los efectos de vibración no funcionarán en el controlador Xbox One .
Según MSDN , "la combinación de los activadores izquierdo y derecho en DirectInput es por diseño. Los juegos siempre han asumido que los ejes del dispositivo DirectInput están centrados cuando no hay interacción del usuario con el dispositivo. Sin embargo, el controlador Xbox 360 se diseñó para registrar un mínimo valor, no centro, cuando los disparadores no se mantienen ". MSDN ofreció la "solución" de combinar los disparadores, estableciendo un disparador en una dirección positiva y el otro en una dirección negativa, por lo que ninguna interacción del usuario indica que DirectInput esté en el centro del "control". [7]
Sin embargo, lo anterior ignora el hecho de que muchos controladores DirectInput, como los gamepads con dos palancas analógicas y juegos de controladores de volante de carreras , ya asignan disparadores y pedales de forma independiente. Además, muchos dispositivos DirectInput también tienen efectos de vibración. Al menos un controlador, XBCD, brinda a los controladores Xbox 360 soporte de vibración, zonas muertas y (opcionalmente) activadores independientes a través de DirectInput. [ cita requerida ] Esto sugiere que el controlador del controlador Xbox 360 de Microsoft tiene intencionalmente un soporte DirectInput más débil, en lugar de debido a cualquier diferencia entre las API DirectInput y XInput. Por otro lado, el controlador Xbox 360 y XInput solo admiten un control muy básico de los motores de vibración [8] [9] en contraste con la gran paleta de varios efectos admitidos por DirectInput. [10]
DirectInput frente a XInput
Microsoft no ha realizado ningún cambio importante en DirectInput desde DirectX 8, e introdujo XInput más tarde en DirectX 9: existe cierta confusión sobre el estado actual y el futuro de las dos API.
La API XInput también a partir de 2010[actualizar] tiene límites que DirectInput no:
- XInput solo admite controladores de "próxima generación". Esto lo limita básicamente a los controladores para Xbox 360 que también tienen controladores de Windows. Los controladores, joysticks y dispositivos de retroalimentación háptica generalizados de Windows no son compatibles.
- XInput admite un máximo de cuatro controladores a la vez. Este es un límite de Xbox, transferido a Windows . Aunque a partir de 2010[actualizar] pocos juegos de PC requieren más de cuatro controladores a la vez, DirectInput en sí no tiene tal limitación.
- XInput no es compatible con teclados, ratones o dispositivos de tipo ratón. Si bien esto refleja la recomendación de Microsoft de no usar DirectInput con estos dispositivos, [11] los programadores pueden usar DirectInput con estos dispositivos.
- XInput admite un máximo de 4 ejes, 10 botones, 2 disparadores y un pad digital de 8 direcciones por controlador, en comparación con el soporte de DirectInput para 8 ejes, 128 botones y POV de rango completo. (La cantidad de ejes, botones y disparadores que admite XInput corresponde directamente al controlador de Xbox 360).
Ventaja de XInput sobre DirectInput:
- Cuando se usa con un controlador Xbox 360 , los botones de disparo izquierdo y derecho actuarán de forma independiente, en lugar de como un solo botón [12]
A partir de 2011[actualizar]XInput es para los controladores de Xbox 360, mientras que DirectInput es para cualquier controlador. En XInput 1.4 introducido con Windows 8 se reintrodujo el soporte de consultas para dispositivos de auriculares. [13]
Referencias
- ^ https://docs.microsoft.com/previous-versions/windows/desktop/ee416842(v=vs.85)
- ^ "Presentación de diapositivas de Meltdown 2005 (.zip)" . Archivado desde el original el 21 de mayo de 2015 . Consultado el 13 de noviembre de 2012 .CS1 maint: bot: estado de URL original desconocido ( enlace )
- ^ "Aprovechando el movimiento del mouse de alta definición" . MSDN . Microsoft . Consultado el 25 de enero de 2009 .
- ^ "DirectInput ConfigureDevices en Windows Vista" . Web.archive.org. 2008-12-27. Archivado desde el original el 27 de diciembre de 2008 . Consultado el 13 de noviembre de 2012 .
- ^ http://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
- ^ http://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
- ^ "XInput y DirectInput" . Microsoft. 2012-09-17 . Consultado el 27 de diciembre de 2012 .
- ^ "Gamepad - Rumbler Control" . Proyecto Free60. Archivado desde el original el 13 de marzo de 2009 . Consultado el 25 de enero de 2009 .
- ^ "XINPUT_VIBRATION" . Msdn.microsoft.com . Consultado el 25 de enero de 2009 .
- ^ "DIEFFECTO" . MSDN . Microsoft . Consultado el 25 de enero de 2009 .
- ^ "DirectInput" . MSDN . Microsoft . Consultado el 30 de mayo de 2010 .
- ^ https://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx
- ^ "Función XInputGetAudioDeviceIds" . MSDN . Consultado el 10 de diciembre de 2013 .
enlaces externos
- Documentación de DirectInput de Microsoft [ enlace muerto permanente ]
- XInput y DirectInput