2011-09-10 20 views
10

No tengo ninguna experiencia práctica con la programación de gráficos. Tengo esta duda cuando estaba leyendo sobre programación de gráficos.En Windows, ¿cómo difiere OpenGL de DirectX?

Por lo que entiendo, porque Windows no ofrecía DOS como el acceso directo al hardware, se creó DirectX. Eso significa que DirectX es la única forma segura de lograr acceso directo (ish) al hardware. ¿Me equivoco?

Si no me equivoco, entonces OpenGL debe implementarse utilizando DirectX o DirectX.

¿No significa que en Windows OpenGL es realmente DirectX?

Tenga en cuenta que mi duda se limita a lo que dice el título, exactamente, y no me interesa por qué es uno mejor que el otro, etc.

Respuesta

22

Por lo que entiendo, porque Windows no ofrecía DOS como el acceso directo al hardware, se creó Direct X.

Tiene razón de que Windows no ofreció DOS como el acceso directo al hardware. De hecho, ningún sistema operativo con protección de memoria lo hace.

Y sí, DirectX fue creado para ofrecer una API para acceso acelerado a ciertos tipos de hardware. DirectX es una API para acelerar el acceso al hardware, no THE (una y única).

Eso significa que Direct X es la única forma segura de lograr acceso directo (ish) al hardware. ¿Me equivoco?

Usted son mal porque nada ni nadie le impide la aplicación de otra pista para el acceso acelerado por hardware. Las piezas de software responsables de canalizar el acceso al hardware se llaman controladores. Los controladores se ejecutan en modo privilegiado, lo que significa que la protección del espacio de direcciones no se aplica a ellos. Es decir, porque los conductores deben poder comunicarse con el hardware.

Los controladores se comunican con programas regulares, el llamado Espacio de usuario a través de API. Las API pueden estar estandarizadas, luego pueden estar estrechamente especificadas o pueden ser completamente apropiadas.

DirectX es una API especificada, la especificación fue anotada por Microsoft.

OpenGL de manera similar es una API, pero en lugar de ser especificada por una sola entidad, está estandarizada de alguna forma en colaboración con varios colaboradores.

Un ejemplo para una API propicia era Glide de 3Dfx, que en gran parte estaba inspirado en OpenGL. De hecho, hay un envoltorio de compatibilidad llamado "minigl" que implementa el subconjunto de OpenGL requerido para que el motor Half-Life 1 funcione en los sistemas 3Dfx/Glide.

Los desarrolladores de controladores de los proveedores de GPU siguen las especificaciones de las API, escribiendo controladores para DirectX, OpenGL o alguna interfaz propia. Cada una de esas API da acceso al controlador y, por lo tanto, al hardware. Y puede haber múltiples API para un solo recurso. Un controlador puede implementar DirectX 3D, OpenGL y todo lo demás en paralelo y proporcionarlos a todos en el espacio del usuario.

Así que no, OpenGL no se basa en DirectX si se envía con un controlador de GPU. Windows Vista y versiones superiores se envían con una emulación OpenGL-1.4 construida sobre DirectX, pero eso no admite sombreadores, objetos de búfer de vértice y todos los otros silbidos y campanas. Tan pronto como instale un controlador GPU con soporte OpenGL, esto reemplaza completamente la emulación OpenGL-1.4 con una implementación real de bajo nivel.

+0

Gracias por una respuesta muy informativa. – Ken

+0

+1 Para proporcionar una respuesta precisa además de las otras respuestas no necesariamente incorrectas pero incompletas. –

+0

Como nota aparte: minigl era para el motor de terremoto 1, que HL1 usó ... – Goz

3

DirectX es una capa de usar las funciones de hardware de la tarjeta gráfica . Desde Windows Vista, la implementación predeterminada de OpenGL (la proporcionada por Microsoft) usa DirectX, por lo que OpenGL es realmente lento. Sin embargo, los fabricantes de tarjetas gráficas brindan a los conductores OpenGL usando directamente la tarjeta gráfica y sin pasar por DirectX, por lo que las actuaciones deben ser las mismas. Si tiene una tarjeta gráfica integrada con un controlador deficiente, OpenGL puede usar DirectX.

+0

Gracias por la respuesta. – Ken

2

El problema es más que había acceso directo al hardware y ninguna capa abstracta conveniente. Los proveedores de software no quieren gastar todo su tiempo escribiendo soporte para cada nueva tarjeta, por lo que presionan a Microsoft para que implemente la abstracción.

La elección fue OpenGL o inventar una nueva capa, varias razones llevaron a esta última.

Vista + puede convertir OpenGL a DirectX, y viceversa Wine puede convertir DirectX a OpenGL.

+0

No entiendo la primera oración. ¿Cómo fue posible el acceso a través del modo de emulación de 16 bits? – Ken

+0

@Ken DirectX apareció con Windows 95, es decir, cuando la protección de memoria era limitada. A menudo tiene mini-controladores como [MiniGLX] (http://en.wikipedia.org/wiki/MiniGLX). –

+0

Aah OK. Gracias por eso. – Ken

2

No, ambos idiomas se comunican directamente con el hardware de la tarjeta gráfica mediante un controlador escrito por el fabricante de la tarjeta, por lo que ambos ofrecen el mismo nivel de acceso al hardware.

Windows admite DirectX directamente, es parte del sistema operativo necesario para efectos de visualización bonitos: su compatibilidad con OpenGL es bastante más limitada, solo admiten v1.1 (ahora estamos en la versión 4) para que pueda hacer cualquier cosa que necesite. para utilizar algunas extensiones adicionales (como glew) o los fabricantes de tarjetas gráficas OpenGL SDK.

En términos de capacidades. DirectX está controlado cuidadosamente por MSFT, por lo que todos los sistemas DirectX deben comportarse de forma idéntica. OpenGL permite a los fabricantes de tarjetas gráficas agregar sus propias extensiones para que puedan producir un mayor rendimiento agregando características específicas al hardware (al menos en teoría). OpenGL también es multiplataforma, por lo que su código Windows OpenGL se ejecutará en cualquier lugar (en teoría)

En la práctica, los únicos controladores OpenGL en Windows que no son completamente inútiles son NVidia, por lo que las aplicaciones OpenGl de alto rendimiento en Windows prácticamente requieren una Tarjeta de NVidia Esto significa que es fácil programar OpenGL en Windows; solo debe apegarse a los documentos de NVidias.

+0

Gracias por la respuesta. – Ken

+0

"GLEW" no es una extensión OpenGL. Es una biblioteca que facilita el uso de las extensiones OpenGL proporcionadas por el fabricante de la GPU. El último párrafo es totalmente parcial y también tonto. –

+0

GLEW no es una extensión openGL ARB_EXT pero es una extensión de las capacidades de OpenGL en Windows. ps Solo intente ejecutar un programa OpenGL de cualquier complejidad en un chipset de gráficos integrados Intel –

Cuestiones relacionadas