2012-06-20 19 views
11

Al considerar la implementación del lado del controlador para la API de DirectX en sistemas Windows para tarjetas de video modernas me preguntaba por qué esta implementación no está disponible en sistemas que no son de Windows, especialmente Linux.¿Por qué no hay DirectX API para Linux?

Dado que existe una ausencia obvia de esta funcionalidad, solo puedo suponer que hay una buena razón por la que soy ciego, pero en mi entendimiento primitivo simplemente veo las llamadas de DirectX como simples puntos de entrada de funciones en el dispositivo de hardware . Y para el registro, no me refiero a una capa de compatibilidad (más notablemente WINE, un proyecto que me sorprende todos los días), sino una biblioteca que realiza llamadas directas de hardware.

¿Es posible crear una versión de código abierto de directx? ¿Sería posible pero obscenamente difícil?

+0

No hay "ausencia de esta funcionalidad". Linux proporciona otras API de gráficos no propietarias que no son de Microsoft. –

+8

@BenVoigt Te has perdido completamente el objetivo de la pregunta. Él no está preguntando sobre la funcionalidad acelerada de renderizado de gráficos 3D, que tiene Linux, sino sobre la funcionalidad de DirectX, que no es así. –

Respuesta

13

AFAIK, el DirectX contiene 3 partes

  • conductor Vendor (proporcionar una baja API nivel definido por DX)
  • biblioteca DirectX (utilizar bajo API nivel definido por DX acceder a hardware, proporcionar API DirectX)
  • (Software DirectX API, ej. juego)

no hay conductor que proporciona la API de bajo nivel definido por DX en Linux, por lo que incluso es posible proporcionar la biblioteca DirectX, pero no funcionará sin un controlador de proveedor adecuado, y no puedo ver si hay algún proveedor que cree uno para su plataforma de hardware.

5

¿Por qué no usar OpenGL? Es compatible con todas las funcionalidades que tiene DirectX. ¿Tiene una razón específica para usar DirectX? En cuanto a un motivo, Microsoft made DirectX y supongo que no vieron ninguna necesidad de permitir que se ejecute en Linux.

Puede ejecutar DirectX games in Linux using Wine. Puede programar XNA en Linux usando MonoGame. Pero todos estos usan OpenGL para proporcionar renderizado acelerado por hardware. AFAIK, OpenGL ha sido (y probablemente será) la única opción en Linux para el futuro previsible.

¿Es posible escribir su propia implementación de DirectX? Claro, pero implica escribir controladores, conocimiento de propiedad y probablemente demasiado para que alguien pueda REALMENTE beneficiarse de ello.

+6

La pregunta proviene del punto de vista de la usabilidad, no tanto de desarrollo. Si la industria del juego usa DirectX, me gustaría saber qué impedimentos hay para que la industria del juego transmita los juegos existentes a Linux. Usando exactamente el mismo hardware, puedo ejecutar un juego de forma nativa en un sistema operativo, pero no en el otro, así que en mi ingenuidad me gustaría imaginar que es tan simple como escribir la capa API y luego pasar todo a los controladores. Obviamente, esto no existe, así que mi comprensión es incorrecta, solo quiero aclaraciones. – Brian

1

El trabajo para crear un puerto para DirectX crearía los mismos problemas que se encuentran en WINE. Nunca será lo mismo que en Windows. Derivado de ese principio, tendrías que buscar en OpenGL y bibliotecas multiplataforma relacionadas.

En este momento, WINE sería su medio más cercano si quiere lograr algo con el código de DirectX que ya tiene. Por otra parte, no estoy seguro de qué manera Visual Studio o mecanografía simple te acercarían a un entorno fluido. Las bibliotecas de WINE no están tan lejos de ser nativas, pero siempre existe la emulación, lo que es aceptable hasta cierto punto en mi honesta opinión.

Si miro lo bien que Final Fantasy XIV ejecutó la configuración completa en mi iMac (2011), creo que no está tan mal confiar en la implementación de WINE. El juego se representa exactamente como en Bootcamp (Windows) en mi iMac.

Si realmente quiere hacer un trabajo en este frente, puede tratar de pedirle a WINE Devs en sus foros o listas de correo que tal vez solo pueda usar la implementación de su compatibilidad con DirectX y usar eso en su proyecto. Donde quizás pueda llamar bibliotecas en lugar de solicitar DirectX a través de llamadas al sistema emuladas por Windows.

Editar: Estoy totalmente de acuerdo con la respuesta de user956030 también.

1

DirectX es un traje de la API:

  • Direct3D (dibujo de gráficos 3D)
  • DirectX Graphics Infraestructura (enumerar los adaptadores y los monitores y la gestión de las cadenas de swap)
  • Direct2D (dibujo de gráficos en 2D)
  • DirectWrite (fonts)
  • DirectCompute (GPU Computing)
  • DirectSound3D (reproducción de sonidos 3D)
  • DirectX Media (DirectAnimation de animación web 2D/3D, DirectShow para la reproducción multimedia y streaming media, DirectX Transform para web interactividad y modo retenido Direct3D para gráficos 3D de nivel superior)
  • DirectX Diagnostics (herramienta para diagnosticar y generar informes sobre componentes relacionados con DirectX, como audio, video y controladores de entrada)
  • DirectX Media Objects (apoyo para la transmisión de objetos tales como codificadores, decodificadores, y efectos)
  • DirectSetup (instalación de componentes de DirectX, y la detección de la versión actual de DirectX)

DirectX componentes en desuso, pero aún así compatibles

  • DirectDraw
  • DirectInput
  • DirectPlay
  • DirectSound
  • DirectMusic

Como se puede ver muchas partes del traje de DirectX de la API tendría que ser reescrito con la funcionalidad para los conductores escrito para Linux. También es probable que algunas partes de la demanda de DirectX realicen llamadas al sistema operativo Windows y ese código debería reescribirse para una máquina Linux sin infringir las partes escritas de DirectX o del sistema operativo Windows.

Sí, podría escribir un juego API de fuente abierta que hace lo mismo que DirectX para Linux, sin embargo, sin un gran conocimiento de controladores de sonido y gráficos/soporte por parte de sus fabricantes para Linux, sería una tarea muy difícil que hacer.

Sin embargo, si tu pregunta era más bien "¿Puedo obtener/escribir algo para poder ejecutar juegos y programas creados con DirectX para ejecutar en Linux?" en su significado, en resumen, no debido a una infracción de copyright más probable.

-1

DirectX es un productos de decoro diseñados para los objetivos de Microsoft, por lo que para que esto suceda sería muy inusual

Hay otras dos piezas de software que vienen a la mente, SDL y OpenGL

OpenGL proporciona el hardware alternativa a DirectX, y SDL funciona con OpenGL para proporcionar la compatibilidad de software que esperaría de DirectX

Cuestiones relacionadas