winapi opengl graphics gdi+ gdi

winapi - ¿Están GDI, GDI+y OpenGL realmente obsoletos/obsoletos?



graphics (6)

¿Están GDI, GDI + y OpenGL realmente obsoletos / obsoletos?

Esto no es cierto para OpenGL. OpenGL 4 le permite usar sombreadores de geometría en winxp. Lo que no es posible con DirectX (DirectX 10 y superior no es compatible con WInXP). También es una de las únicas API 3D multiplataforma que hay.

Desde un punto de vista empresarial, MS está interesada en promover DirectX, ya que es su tecnología la que bloquea a Developer en la plataforma de Windows (también están interesados ​​en hacer que DirectX sea más atractivo para los desarrolladores, pero esa es otra historia). Así que tiene sentido que no estén interesados ​​en la promoción de OpenGL.

¿Qué más se debe usar?

Aconsejaría dejar de usar tecnologías específicas de la plataforma cuando sea posible. Coge el framework multiplataforma y úsalo para tu aplicación. Hay Qt, GTK, wxWidgets y otros kits de herramientas para aplicaciones GUI, y SDL (y alternativas) para juegos. De esta manera, cuando el desarrollador de la plataforma decida tomar una decisión ridícula (como no admitir DX10 en WinXP) no le gusta, podrá mudarse a otro lugar con un costo de desarrollo mínimo. Qt también es ridículamente poderoso y por el momento no tengo ninguna razón para usar otra cosa para el desarrollo de GUI. Aún así, la situación puede cambiar en el futuro.

En resumen, al desarrollar para ciertas plataformas, debe tener en cuenta que los desarrolladores de plataformas pueden tener objetivos que no son compatibles con sus deseos. Descubrir que su fuente se ha bloqueado en una plataforma única no es una experiencia muy agradable. Sus propios objetivos deben ser la primera prioridad, y si el desarrollador trata de hacer que use cierta tecnología que no le gusta, entonces no debe respaldar esa tecnología.

Si abre la página "Gráficos y juegos (Windows)" en microsoft.com

la última categoría se describe como

Gráficos heredados: tecnologías que están obsoletas y no deben usarse en nuevas aplicaciones.

Esta categoría incluye (entre otras) las siguientes API:

  • GDI
  • GDI +
  • OpenGL

¿Cual es tu opinion? Si deseo implementar un nuevo software hoy, debe ser compatible con Windows XP (aún aproximadamente el 50% de todos los sistemas instalados). Direct2D requiere Windows 7 / Vista. ¿Qué más se debe usar?


Debido a que OpenGL es un estándar, debe considerarse igualmente obsoleto como C o C ++, por lo que es una cuestión de tiempo antes de que se considere la API de Windows completa, que hoy se ha convertido en una compilación una vez que se ejecuta en cada API de la máquina x86 gracias a Wine. En desuso a favor de .NET y C #.

Utilizo GDI para gráficos simples y OpenGL, cuando necesito 3D acelerado.

Otro aspecto es que la implementación incorporada de OpenGL de Microsoft definitivamente se debe considerar como obsoleta ya que es solo la versión 1.1 o algo así, pero eso ha sido durante mucho tiempo.


OpenGL no está en desuso, la implementación de Microsoft lo está . La implementación de Microsoft está atascada en la versión 1.1, que es antigua. La versión actual del estándar es anterior a la versión 4. Si desea utilizar OpenGL, es totalmente compatible con NVidia , ATI y las tarjetas gráficas Intel en el escritorio de Windows, pero no en las aplicaciones de la interfaz de usuario moderna de Metro Windows, es un estándar de la industria. Y también funciona en Mac y Linux. Si necesita una implementación alternativa de software, Mesa tiene cubierto, e incluso funciona en DOS. (Dado que Mesa puede transformarse en búferes de memoria, no hay razón para que no funcione en las aplicaciones de la interfaz de usuario moderna, pero probablemente no quiera hacer esto porque puede ser lento). Una cosa importante es que WGL, la API para El acceso a la funcionalidad de OpenGL en el escritorio de Windows depende de GDI (que está en desuso), por lo que probablemente quiera usar algo como FreeGLUT o SDL si desea probar su aplicación en el futuro, lo que también le da independencia a su plataforma.

OpenGL ES es una variante de OpenGL que funciona en Android y Apple iOS. También está disponible en JavaScript a través de WebGL , que es compatible con Internet Explorer 11 ( y casi todos los demás navegadores ya lo hacen ) . ANGLE proporciona una implementación acelerada por hardware de GLES para Windows que se complementa con DirectX (versión 9 u 11) y por lo tanto También debería funcionar en las aplicaciones modernas de UI. Una vez más, Mesa ha cubierto la implementación del software.

TL; DR: OpenGL no solo no está en desuso, sino que es multiplataforma, estándar y tiene un tremendo impulso en la industria. GDI y GDI +, bueno, no tanto.


Sí, sobre OpenGL, en realidad supera a DirectX de muchas maneras, tanto en recursos como en pantallas. Microsoft nunca lo promocionará porque no puede ser propietario de OpenGL, sin mencionar que la mayoría de las personas no investigan y Microsoft puede afirmar que es antiguo. La verdad es que opengl es el estándar de código abierto y evoluciona a un ritmo mucho más rápido que el cerrado porque es más de una sala de desarrolladores pagada para trabajar en él. Además, Microsoft tiene contratos con muchas compañías para realizar el lanzamiento utilizando solo el software de Microsoft, lo que hace que más negocios para Microsoft y menos usen el estándar OpenGL más avanzado. Es un bloqueo interesante si así lo desea, Microsoft crea estos contratos para que muchos programas estén escritos en DirectX para mantener el negocio de Microsoft, y ninguna compañía lo rechazará porque Microsoft tiene aproximadamente el 80% + del mercado de usuarios domésticos.


Si desea ser compatible con Windows XP, entonces es compatible con un sistema operativo "heredado" y, como tal, la opción lógica es utilizar un marco de gráficos "heredado".

Incluso si eso no fuera cierto, solo digamos que no estoy de acuerdo con el consejo dado por el artículo de MSDN vinculado. El estado "heredado" aquí tiene más que ver con la tecnología que el equipo de Windows cree que es genial esta semana. La designación de estado de "obsoleto" simplemente significa que el grupo responsable ya no acepta o cumple con los informes de errores (excepto los problemas de seguridad críticos). No es un gran problema, estas tecnologías han existido tanto tiempo que son bastante completas y estables.

GDI no va a ninguna parte, por lo que si necesita algo sólido que garantice que sea compatible en cualquier parte y en cualquier lugar, eso es lo que yo haría.

Si necesita un poco más de capacidades 2D que las ofertas de GDI (por ejemplo, transparencia de canal alfa), entonces podría considerar usar GDI +. Es casi un orden de magnitud más lento que el GDI, pero no es un problema demasiado grande en las máquinas modernas con más potencia de la que podría desear. Esto, también, será soportado por un tiempo muy largo por venir.

Dicho esto, si estuviera escribiendo una nueva aplicación hoy, probablemente no me molestaría con OpenGL. Hay muy poco que ofrece en beneficios sobre Direct2D y DirectWrite, que son lo que Microsoft está presionando como los reemplazos para GDI / GDI +. Puede ser beneficioso utilizar OpenGL si es absolutamente necesario apuntar a Windows XP porque, por lo que puedo decir, Direct2D / DirectWrite solo es compatible con Vista y posteriores, pero eso se debe a que (como mencioné originalmente), Windows XP encaja perfectamente en el El "legado" o el "obsoleto" campamento en sí. Alternativamente, si ya conoce bien OpenGL y no tiene tiempo o el deseo de aprender Direct2D / DirectWrite, entonces podría tener sentido continuar usándolo en una nueva aplicación.

No dejes que la palabrería del artículo de MSDN te asuste. Elija la tecnología que tenga más sentido para su caso de uso específico, dada toda la información disponible. Cuando cualquiera de estas tecnologías desaparezca por completo, tendrá que volver a escribir la aplicación por completo por una docena de otras razones.

Edición: Hmm, parece que DirectWrite también ha sido declarado (al menos por algunas personas) "obsoleto", luego de haber sido reemplazado por Direct2D. Es gracioso, ni siquiera ha existido el tiempo suficiente para que me moleste en aprenderlo. Supongo que eso solo respalda mi argumento anterior de que "obsoleto" simplemente designa que una tecnología en particular no es lo que los desarrolladores de Microsoft consideran actualmente en boga.

Personalmente estoy esperando hasta que todos los errores se solucionen con esto (y decidimos un estándar semipermanente) antes de hacer el cambio para cualquiera de mis aplicaciones. Todo lo que he visto escrito en DirectDraw o Direct2D ha tenido graves errores de renderización y es una pesadilla de rendimiento, incluso en máquinas razonablemente competentes. Claro, solo aparecen a veces , en las condiciones adecuadas, pero eso es demasiado para mí. Y lo juro, el texto borroso aparece todo el tiempo . No poder leer lo que está en la pantalla es un gran asesino para mí y para mis usuarios. GDI no tiene este problema, y ​​no va a ninguna parte.


Sospecho que la definición de Microsoft de "legado" tiene poco que ver con lo que debería hacer cualquier desarrollador sensato, y en su lugar se basa en algunos Grand Rewrite de la API de Windows.

A partir de Windows Vista, Microsoft ha rediseñado muchas de sus API. Ahora tenemos MMDevAPI como la API One True Sound, WIC es la API One True Image File, etc. Por lo que he visto / escuchado, estas nuevas API son mucho mejores que las antiguas, y todos los sistemas "heredados" funcionan Basado en los nuevos. En Windows Vista y versiones posteriores, DirectSound se basa completamente en MMDevAPI, y los componentes que necesitan leer archivos de imagen lo hacen a través de WIC.

Windows 8 tendrá una versión ARM, que parece que solo admitirá un subconjunto de la API de Windows actual. No lo sabremos con seguridad hasta que se lance Windows en ARM, pero, según las bibliotecas incluidas para la plataforma ARM en Visual Studio 11 (ref: http://www.winehq.org/pipermail/wine-devel/2012-March/094559.html ), parece que GDI + y OpenGL no estarán disponibles. GDI está disponible para vincular, pero eso no significa necesariamente que esté intacto.

Estas nuevas API de Vista y, posteriormente, corresponden aproximadamente a las bibliotecas en el destino ARM de VS11. Supongo que hay algo en esa lista porque es la mejor y más reciente forma de hacer lo que hace, o es demasiado importante desde el punto de vista técnico (por ahora). Por lo tanto, "legado" es algo que no es la mejor forma de hacer al menos una cosa.

No estoy seguro de qué es la API de One True Graphics. Ya tenemos Direct2D, Direct3D, DirectComposition (que, por cierto, no está disponible hasta Windows 8), DirectWrite y DXGI. DXGI parece ser el más cercano, pero no tengo una comprensión lo suficientemente profunda de las API de gráficos para decir. Sospecho que gdi32 es técnicamente muy difícil de eliminar. ¿Cómo se pretende que las aplicaciones no heredadas descubran cuándo se reveló parte de una ventana y, por lo tanto, deben pintarse, sin usar WM_PAINT, que implica un HDC, y cómo podría una biblioteca hacer eso en nombre de una aplicación sin reemplazar su procedimiento de ventana? ¿Cómo se pretende que hagamos ventanas semitransparentes sin usar UpdateLayeredWindow, que requiere un HDC? ¿Cuánto depende user32 de gdi32? ¿Se pueden separar realmente?

Desde un punto de vista técnico, Windows puede deshacerse fácilmente de GDI + y OpenGL, pero no estoy convencido de que deshacerse de OpenGL funcionará, incluso en una nueva plataforma que no prometa ninguna compatibilidad con versiones anteriores. Parece demasiado valioso para los desarrolladores. GDI + no es tan importante, pero es muy fácil para un tercero proporcionar un reemplazo.

Yo diría que use cualquiera de los API que figuran en la lista, y lo peor que puede ocurrir es que tenga que volver a escribir su interfaz de usuario si desea transferir su aplicación a Metro o Windows en ARM. GDI es una buena opción si sus necesidades son simples y estará codificando directamente para la API de Windows. No hay muchas situaciones en las que recomiendo GDI + sobre OpenGL como una API de dibujo. GDI + es lento, limitado y solo está disponible en Windows. La API de GDI + es más sencilla porque es 2D, por lo que quizás valga la pena si necesita hacer algo muy simple pero con antialias.