Estoy probando con glDrawPixels para migrar mi sencillo juego 2D de píxeles de la API de Windows a OpenGL con GLFW. Funciona bien con FPS por encima de 100, además de multiplataforma.
Solo una cosa que me molesta un poco es que estoy usando una característica obsoleta. No veo ningún problema ahora, pero ¿es posible que esto sea un problema en el futuro? ¿Se pueden eliminar repentinamente glDrawPixels ? Todo lo que necesito es una alternativa multiplataforma a CreateWindow y BitBlt de winapi.
Me gustaría ampliar el artículo sobre el desuso en el wiki de OpenGL que ya se proporcionó en los comentarios.
La situación actual es que podemos discernir 3 "sabores" de contextos OpenGL en plataformas de escritorio:
El primer caso, GL "heredado", se limita a GL 2.1 y versiones anteriores de manera multiplataforma. Todos los principales sistemas operativos de escritorio (Windows, Linux, OSX) tienen soporte para esto en todas las principales marcas de GPU (Intel, NVidia, AMD). Y es poco probable que esto desaparezca por mucho tiempo, ya que todo el software "antiguo" que ni siquiera es consciente de la existencia de GL moderno se basa en él.
Lo que describo como GL "moderno" significa GL 3.2 y posteriores. Y ahí se han inventado los perfiles . El quid es que solo se requiere soporte para el perfil principal , el perfil de compatibilidad es opcional. En los perfiles principales, las funciones obsoletas en realidad se eliminan , por lo que su código no funcionará en un perfil principal. En los perfiles de compatibilidad, las funciones en desuso todavía están disponibles.
Por lo tanto, la única forma de combinar funciones heredadas antiguas (como canalización de función fija, modo inmediato o su llamada glDrawPixels ) con funciones GL modernas es un perfil de compatibilidad. Sin embargo, en la práctica, el soporte de compatibilidad generalmente no está disponible. MacOSX generalmente no admite perfiles de compatibilidad, y tampoco los controladores Linux de código abierto basados en Mesa. Entonces, realmente no se puede hacer un desarrollo multiplataforma con un perfil de compatibilidad.
Tenga en cuenta que de alguna manera me salté GL 3.0 y 3.1. Son algo intermedio y recomiendo nunca tratar de usarlos. OSX no los admite en absoluto. Y, de hecho, cualquier GPU del mundo real que admita GL 3.0 también admite al menos GL 3.2 de todos modos.
Te veo dos opciones:
glDrawPixels nunca ha sido eficiente. Probablemente sea mucho mejor usar un cuádruple texturizado (o tal vez incluso glBlitFramebuffer ) para enviar imágenes a la pantalla.