En informática, WinG (pronunciado Win Gee) es una interfaz de programación de aplicaciones que fue diseñada para proporcionar un rendimiento gráfico más rápido en entornos operativos Windows 3.x, y se posicionó inicialmente como una forma de ayudar a los desarrolladores de juegos a portar más fácilmente sus juegos de DOS a Microsoft Windows,[1] aunque se suspendió rápidamente a favor de DirectX.
WinG solucionó dos problemas. El primer problema que solucionó WinG fue que Windows 3.x no admitía la creación de Contextos de dispositivos (DC) basados en mapas de bits independientes del dispositivo, solo dispositivos de visualización reales. Una limitación importante de los DC de GDI fue que eran de solo escritura. Los datos, una vez escritos, no se pudieron recuperar. El segundo problema fue que todo el dibujo GDI se implementó en los controladores de video de Windows 3.x. Esto incluyó el dibujo de mapas de bits. Obviamente, el rendimiento de tales rutinas varía según los controladores.
Alex St. John, uno de los creadores de DirectX, dijo en una entrevista de 2000 que,
WinG era una tecnología que estaba construyendo Chris Hecker en el grupo de investigación, y en ese momento era uno de los pequeños proyectos Skunkworks de Microsoft, de muy bajo perfil y fuera de la pared. Básicamente, estaba arreglando los controladores de Windows rotos para hacerlos correr más rápido y de manera más aceptable. Al usarlo, pudimos crear una API de video que podía ejecutar DOOM casi tan rápido en Windows como lo hizo en DOS.[2]
Microsoft anunció WinG en la Game Developers Conference de 1994, demostrándolo con un puerto de Doom de id Software.[3] WinG fue enviado el 21 de septiembre de 1994.[4] WinG, aunque interesante, todavía se basaba fundamentalmente en dibujar mapas de bits en la memoria y en generar marcos después de que se realizara el dibujo. Como resultado, WinG quedó en desuso y se creó DirectX. Sin embargo, Windows NT 3.5 y Windows 95 introdujeron CreateDIBSection para proporcionar soporte para la creación de DC basadas en DIB y controladores de video que finalmente mejoraron.
WinG introdujo un nuevo tipo de DC llamado WinGDC,[5] que permitió a los programadores leer y escribir directamente usando mapas de bits independientes del dispositivo (DIB) con el controlador wingdib.drv. Efectivamente, les dio a los programadores la capacidad de hacer con Windows lo que habían estado haciendo sin limitaciones de acceso al hardware en DOS durante años. Los programadores podrían escribir DIB en el WinGDC, pero aún tendrían acceso a los bits individuales de los datos de la imagen. Esto significaba que se podían escribir algoritmos gráficos rápidos para permitir un desplazamiento rápido, sobregiro, rectángulos sucios, doble almacenamiento en buffer y otras técnicas de animación. WinG también proporcionó un rendimiento mucho mejor al enviar datos gráficos a la memoria del dispositivo gráfico físico. Como WinG utilizó el formato DIB, fue posible mezclar llamadas API GDI originales y llamadas WinG.[5]
WinG también realizaría una prueba de perfil de hardware/controlador de gráficos en la primera ejecución del programa para determinar la mejor manera de dibujar DIB. Esta prueba mostró una ventana llena de líneas curvas rojas, cuyas secciones se tambalearían a medida que se probara el rendimiento. Una vez que WinG haya determinado las llamadas más rápidas que no causaron daños en los gráficos, se guardará un perfil para que no sea necesario volver a realizar la prueba.
El soporte inmediato de WinG (es decir, como una API separada para Win32) se eliminó en Windows 98 Second Edition (que integraba DirectX 6), ya que no hizo absolutamente nada más que pasar a las API de Win32 que estaba envolviendo (incluyendo CreateDIBSection). Las DLL de WinG a veces se distribuían con una aplicación, en cuyo momento simplemente se trataba de copiar los archivos wing.dll, wing32.dll, wingde.dll, wingdib.drv y wngpal.wnd al directorio system32 (para Windows de 32 bits) o el directorio SysWOW64 (para Windows de 64 bits) para recuperar el soporte de todo el sistema.