PDA

Ver la versión completa : diferencias opengl vs directx



perereman
16/05/2006, 11:49
a ver quien me ilumina al respecto: pq usar uno u otro? pq casi todos los juegos salen en directx cuando imagino que tendrán que pagarle derechos a microsoft.

s2

palloco
16/05/2006, 12:15
No hay que pagar derechos a Microsoft. Se suele usar Dx porque es más sencillo programar en ese lenguaje, pero OpenGL es más eficiente

perereman
16/05/2006, 14:10
k juegos actuales hay en opengl?

PGM
16/05/2006, 14:11
Los de ID Software lo son.

GraxaS
16/05/2006, 14:49
y que sigan siendo

TEMETER
16/05/2006, 17:29
No hay que pagar a microsoft... ke no es poko con los tiempos ke corren.

Puedes pasar el software de plataforma windows a linux, cosa ke con dx olvidate.

Y lo peor tambien he oido ke es mas engorroso de programar.

Microsoft kiere ke el futuro sea windows y dx pero la verdad es ke el futuro que se esta buscando es usar linux para trabajar y navegar y salirte al windows pirateado para echar unas partidas.

Killeak
16/05/2006, 18:16
Las principales diferencias son:

Direct3D es un API solo para plataformas de MS (PC, XBox, Mobile, etc) y es esta quien lo maneja. Esta basado en COM y por lo tanto en Objetos. Esta pensado para usarce con C++(porque son objetos), aunque es posible usar objetos COM desde C(aunque mas engorroso). Cada Version tiene una cantidad fija de Features aunque hasta la version 9 posee un sistema de capabilities para poder detectar cuales faltan. Direct3D 10 es un nuevo API con features fijos (sin sistema de capabilities) con una nueva arquitectura totalmente basada en Shaders, que hacen al API mas limpio y eficiente (se eliminarion cosas obsoletas de HW antiguo como el Fixed Pipeline).

OpenGL es un API Standard abierto para varias plataformas tipo PC (PC, Mac, Linux, worktations SGI, etc). Es un API estructurada en C clasico (no son Objetos). El Standard oficial esta bajo la ARB (Arquitecture Review Board). Tiene un mecanismo de extensiones por el cual otras empresas pueden agregar soporte al API para Features de su HW, cosa que vuelve al API muy caotico.

OpenGL ES es el Standard para plataformas mobiles (PDA, Celulares) y el que usara la Play Station 3. Lo controla el Chronos Group. Es una version limpia de OpenGL comun, sin sistema de extensiones pero el Chronos Group lo mantiene adelantado al HW que hay en el mercado. Tambien es un API basado en C (estructurado).

En cuanto a la eficiencia, Direct 3D por tener parte del codigo en Modo usario y otra en modo Kernel, es mas lento en ciertas operaciones (Draw Primitive la mas importante). Direct3D 10 en cambio (al igual que el nuevo Driver de Video de Vista) corre enteramente en modo usario, el cual es mas seguro y eficiente (no puede provocar crashes de sistema, solo de aplicacion).


Actualmente Direct3D es el API mas usado en PC (windows) y OpenGL ES en plataformas mobiles (en lugar de Direct3D Mobile). La principal razon de porque D3D se convirtio en el API mas usado en PC, es porque es un API mejor documentado (ademas de que depende menos del Driver), con mas herramientas y mejor estructurado (aunque a MS le costo varias generaciones llegar a esto) ademas de contar con mejor soporte por parte de los Vendors (salvo nVidia donde el soporte OpenGL es igual o mejor). OpenGL solia ser mucho mas usado cuando el API de D3D era mas caotico (primeras generaciones).

En escensia es un resumen de cuales son las diferencias principales entre los APIs graficos actuales.

Saludos,

perereman
17/05/2006, 11:11
muchas gracias killeak

AvFenix
17/05/2006, 12:03
El OpenGL, la gran ventaja que tiene, es que al ser un sistema abierto, es multiplataforma. DirectX es propiedad de Microsoft, así que solo aplicable a Windows y si no me equivoco también a XBox/360. En principio, OpenGL estaba más evolucionado que Direct3D, pero desde Direct3D 8 en adelante, Direct3D, no ha parado de mejorar, y OpenGL se ha quedado un poco parado en la versión 1.5. Aún así no hay grndes diferencias, pero el caso es que el Direct3D es mayoritariamente usado para juegos Windows. OpenGL, unicamente lo utliza ID Software, y todos los juegos que funcionen sobre motor gráfico de ID Software (hablando de juegos Windows).

Diferencias tanto en eficiencia como calidad, hay pocas entre OpenGL y Direct3D.

El que DirectX hasta la versión 9.1 se ejecute en el kernel, no le resta eficiencia. De hecho es al contrario, y se puso en el Kernel para ganar rendimiento. Todo lo que se pone en el Kernel tiene mayor prioridad sobre cualquier otro proceso que se ejecute fuera del Kernel. A cambio se pierde en seguridad, porque un fallo en el Kernel, supone desestabilizar todo el sistema. Un fallo fuera del Kernel supone que ese proceso fallido es fácil de eliminar, evitando que se desestabilice el sistema.

Ahora con la versión 10, se sacan las DirectX fuera del Kernel, pero no para ganar rendimiento, sino en seguridad. Teoricamente se perdería rendmiento, lo que ocurre es que está hecho de forma que no se va a notar ninguna pérdida, por una razón, y es que el entorno gráfico de Windows Vista donde funcionarán las DirectX10, será gestionado por la GPU de la aceleradora 3D. Hasta ahora el entorno gráfico de Windows XP y demás Windows, está gestionado por la parte 2D de las tarjetas gráficas asistidas por la CPU. Las aceleradoras 3D son mucho mejores gestionando gráficos 3D que en 2D. Y eso se va a notar con el Windows Vista que se apoya al completo en DirectX10 para mover la interfaz gráfica. Y por supuesto va a compensar de sobra que se saque el entorno gráfico del kernel.

Saludos

Killeak
17/05/2006, 14:58
El que DirectX hasta la versión 9.1 se ejecute en el kernel, no le resta eficiencia. De hecho es al contrario, y se puso en el Kernel para ganar rendimiento. Todo lo que se pone en el Kernel tiene mayor prioridad sobre cualquier otro proceso que se ejecute fuera del Kernel. A cambio se pierde en seguridad, porque un fallo en el Kernel, supone desestabilizar todo el sistema. Un fallo fuera del Kernel supone que ese proceso fallido es fácil de eliminar, evitando que se desestabilice el sistema.

Ahora con la versión 10, se sacan las DirectX fuera del Kernel, pero no para ganar rendimiento, sino en seguridad. Teoricamente se perdería rendmiento, lo que ocurre es que está hecho de forma que no se va a notar ninguna pérdida, por una razón, y es que el entorno gráfico de Windows Vista donde funcionarán las DirectX10, será gestionado por la GPU de la aceleradora 3D... Y por supuesto va a compensar de sobra que se saque el entorno gráfico del kernel.

Saludos
Estar en modo Kernel o modo usario no hace que sea necesariamente mas eficiente(la diferencia es insignificante), lo que hace a D3D9- menos eficiente es que tenga parte en ambos y tenga que switchear constantemente (que es lo que hace costoso por ejemplo las DrawPrimitive). Ademas D3D10 por su arquitectura depende mucho menos del CPU para alimentar al GPU, por lo cual tambien se vuelve mas eficiente, ademas de que es un API mucho mas delgado, es decir tiene muchas menos capas de abstraccion (ademas que esto es configurable).

Como un detalle no hay Direct3D 9.1 sigue siendo 9.0c (aunque cada release incrementa la version de la D3DX library). Ademas se supone que Direct3D 9L (o Ex), que es la implementacion nativa de Direct3D 9 bajo Windows Vista y que usa AeroGlass, tambien correria solo en modo usario, la razon es que el Nuevo sistema de Drivers de Vista tambien corre en modo usuario.

Saludos,