#50#27 voy a ver si soy capaz de aclarar alguna de estas siglas; no soy ningún experto del tema pero algún conocimiento tengo. Eso sí, la última vez que hice algo de esto en Windows fue con DirectX 8 y ahora al parecer van por la 11... Así que si me equivoco las aclaraciones/correcciones serán bienvenidas.
En primer lugar, aclarar que hay dos posibles formas de utilización de las tarjetas gráficas: una es aceleración 2D y otra es aceleración 3D. Para que os hagáis una idea, los escritorios tradicionales utilizan aceleración 2D, que básicamente es aprovechar la imagen que ya está en memoria, y como mucho aplicar alguna transformación. La aceleración 3D además de trabajar con imágenes (texturas) trabaja con vértices y permite adaptar el punto de vista (lo que viene a ser Compiz, que te renderiza un cubo y en cada cara le aplica una imagen distinta). Los FPS en plan Quake, Doom (es que hace mucho que dejé el mundillo de los juegos :), tb utilizan 3D, y se nota en que adaptan la vista
en función de la posición del moñigote. Recientemente las tarjetas también tienen soporte para vídeo y para shaders; los shaders es simplemente una API para aprovechar la capacidad de cálculo paralelo de estas tarjetas para realizar aplicaciones de "propósito general". La decodificación de vídeo pues no es más que una mezcla entre la aceleración 2D y la ecodificación de diferentes códecs de vídeo (utilizando shaders u otras técnicas). Resumiendo, , e si te da la sensación de profundidad seguramente estén utilizando 3D y si te da la sensación de imagen plana pues sea 2D.
Como bien comentas en lo más bajo están los drivers de la tarjeta; en windows los drivers los da el propietario y ya; así tienes los drivers de Nvidia, Ati o Intel (no sé si hay alguna más). Encima de los drivers tienes DirectDraw para gráficos 2D y Direct3D para gŕaficos 3D. También tienes DirectShow para temas de vídeo. Todo esto está empaquetado en DirectX.
En Linux, sin embargo tienes los drivers propietarios y los libres. Intel y Ati creo que proporcionan drivers libres (de todas formas no conozco mucho). Nvidia porporciona drivers propietarios, y además hay dos implementaciones libres: nv y nouveau. Parece que el futuro va por nouveau, pero de momento no tiene soporte para 3D. DRI es una APi que proporciona acceso a la capacidad del driver de dar soporte 3D; DRI2 no lo había oído hasta tu comentario (ya te digo que hace mucho que no trabajo con esto). Aquí me tiro un poco (¿un poco más?); la API para trabajar con 2D es DirectFB (el framebuffer que mencionas).
Encima de DRI tienes OpenGL, que no es más que otra API estándar para trabajar con gráficos 3D. OpenGL sería el equivalente a Direct3D (aunque ambién hay OpenGL para Windows). Permite trabajar con vértices y texturas. Nunca he trabajado con DRI, pero supongo que será algo a más bajo nivel. La verdad es que OpenGL es también bastante bajo nivel, así que te recomiendo que después de hacer un par de turoriales te pases a un Scene Graph como Ogre, OpenSceneGraph u OpenSG. La implementación de OpenGL es dependiente de la tarjeta. Es decir, cuando instalas los drivers propietarios de Nvidia verás que ten instala las librerías de OpenGL pertinenetes. Si tu driver no proporciona aceleración 3D (eso es, la API DRI) puedes seguir haciendo aplicaciones 3D; sin embargo alguien tiene que hacer esos cáclulos. Pues esa capacidad la da Mesa3D, que no es más que una implementación de OpenGL pero integramente en software. Como te imaginarás bastante lenta.
OpenAL es una APi para reproducir sonidos de forma sencilla. La verdad es que aquí no me voy a meter, porque si el tema de los gráficos es complicado en Linux, el tema del sonido es algo descomunal. Simplemente decir que sería el equivalente a DirectSound (también parte de DirectX) y que funciona sobre el driver en Windows o sobre alsa o pulseaudio en Linux, y puede que sobre Jack, OSS, ESD, y si me dejo alguno espero que me perdonen los entendidos :P). esumiendo OpenAL te deja abrir un canal de audio y empezar a mandar muestras.
SDL es una API que pretende facilitar la creación de juegos. Para ello proporciona acceso a la funcionalidad de gráficos 2D (no sé si 3D directamente)
y del audio (creo que a través de OpenAl, directamente a través de Alsa y otros drivers, pero no sé como está ahora el soporte para pulseaudio).
XServer/X.org es una arquitectura cliente servidor que permite renderizar gráficos en una pantalla. Los drivers propietarios de Nvidia requieren un servidor de estos, pero por lo demás no deja de ser un servidor que proporciona acceso a la tarjeta gráfica de forma remota (o local).
Por último falta Wine y Gallium3D. Wine es una implementación de la APi de windows wn Linux. ¿Qué quiere decir esto? Iimagina que tienes un programa que abre un fichero, y par ello llama a la función OpenFile. El problema es que en la API de Linux, la función que hace lo mismo, no se llama OpenFile, sino open_file. Cuando ejecutas tu programa de Windows en Linux, va a intentar ejecutar un función OpenFile, pero que no encuentra en ninguna librería, y por lo tanto fallará. Wine crea una librería con una función OpenFile, de forma que tu programa de Windows la encuentra y puede seguir ejecutandose. Gallium3D viene a ser lo mismo pero para temas de 3D; es decir, si tu programa espera llamar a una función IDirect3D9::CreateDevice(), pues Gallium proporciona una implementación que hará las llamadas correspondientes a DRi o al Driver.
De todas formas, como ya te he dicho, si el tema de los gráficos te parece complicado/lioso en Linux, no empieces con el audio, que eso si es para cagarse.
Espero que esta chapa le sirva a alguien, y las correcciones serán bienvenidas, que como ya digo, no soy ningún experto del tema (aunque me ha tocado pegarme mucho con estas cosas)
En primer lugar, aclarar que hay dos posibles formas de utilización de las tarjetas gráficas: una es aceleración 2D y otra es aceleración 3D. Para que os hagáis una idea, los escritorios tradicionales utilizan aceleración 2D, que básicamente es aprovechar la imagen que ya está en memoria, y como mucho aplicar alguna transformación. La aceleración 3D además de trabajar con imágenes (texturas) trabaja con vértices y permite adaptar el punto de vista (lo que viene a ser Compiz, que te renderiza un cubo y en cada cara le aplica una imagen distinta). Los FPS en plan Quake, Doom (es que hace mucho que dejé el mundillo de los juegos :), tb utilizan 3D, y se nota en que adaptan la vista
en función de la posición del moñigote. Recientemente las tarjetas también tienen soporte para vídeo y para shaders; los shaders es simplemente una API para aprovechar la capacidad de cálculo paralelo de estas tarjetas para realizar aplicaciones de "propósito general". La decodificación de vídeo pues no es más que una mezcla entre la aceleración 2D y la ecodificación de diferentes códecs de vídeo (utilizando shaders u otras técnicas). Resumiendo, , e si te da la sensación de profundidad seguramente estén utilizando 3D y si te da la sensación de imagen plana pues sea 2D.
Como bien comentas en lo más bajo están los drivers de la tarjeta; en windows los drivers los da el propietario y ya; así tienes los drivers de Nvidia, Ati o Intel (no sé si hay alguna más). Encima de los drivers tienes DirectDraw para gráficos 2D y Direct3D para gŕaficos 3D. También tienes DirectShow para temas de vídeo. Todo esto está empaquetado en DirectX.
En Linux, sin embargo tienes los drivers propietarios y los libres. Intel y Ati creo que proporcionan drivers libres (de todas formas no conozco mucho). Nvidia porporciona drivers propietarios, y además hay dos implementaciones libres: nv y nouveau. Parece que el futuro va por nouveau, pero de momento no tiene soporte para 3D. DRI es una APi que proporciona acceso a la capacidad del driver de dar soporte 3D; DRI2 no lo había oído hasta tu comentario (ya te digo que hace mucho que no trabajo con esto). Aquí me tiro un poco (¿un poco más?); la API para trabajar con 2D es DirectFB (el framebuffer que mencionas).
Encima de DRI tienes OpenGL, que no es más que otra API estándar para trabajar con gráficos 3D. OpenGL sería el equivalente a Direct3D (aunque ambién hay OpenGL para Windows). Permite trabajar con vértices y texturas. Nunca he trabajado con DRI, pero supongo que será algo a más bajo nivel. La verdad es que OpenGL es también bastante bajo nivel, así que te recomiendo que después de hacer un par de turoriales te pases a un Scene Graph como Ogre, OpenSceneGraph u OpenSG. La implementación de OpenGL es dependiente de la tarjeta. Es decir, cuando instalas los drivers propietarios de Nvidia verás que ten instala las librerías de OpenGL pertinenetes. Si tu driver no proporciona aceleración 3D (eso es, la API DRI) puedes seguir haciendo aplicaciones 3D; sin embargo alguien tiene que hacer esos cáclulos. Pues esa capacidad la da Mesa3D, que no es más que una implementación de OpenGL pero integramente en software. Como te imaginarás bastante lenta.
OpenAL es una APi para reproducir sonidos de forma sencilla. La verdad es que aquí no me voy a meter, porque si el tema de los gráficos es complicado en Linux, el tema del sonido es algo descomunal. Simplemente decir que sería el equivalente a DirectSound (también parte de DirectX) y que funciona sobre el driver en Windows o sobre alsa o pulseaudio en Linux, y puede que sobre Jack, OSS, ESD, y si me dejo alguno espero que me perdonen los entendidos :P). esumiendo OpenAL te deja abrir un canal de audio y empezar a mandar muestras.
SDL es una API que pretende facilitar la creación de juegos. Para ello proporciona acceso a la funcionalidad de gráficos 2D (no sé si 3D directamente)
y del audio (creo que a través de OpenAl, directamente a través de Alsa y otros drivers, pero no sé como está ahora el soporte para pulseaudio).
XServer/X.org es una arquitectura cliente servidor que permite renderizar gráficos en una pantalla. Los drivers propietarios de Nvidia requieren un servidor de estos, pero por lo demás no deja de ser un servidor que proporciona acceso a la tarjeta gráfica de forma remota (o local).
Por último falta Wine y Gallium3D. Wine es una implementación de la APi de windows wn Linux. ¿Qué quiere decir esto? Iimagina que tienes un programa que abre un fichero, y par ello llama a la función OpenFile. El problema es que en la API de Linux, la función que hace lo mismo, no se llama OpenFile, sino open_file. Cuando ejecutas tu programa de Windows en Linux, va a intentar ejecutar un función OpenFile, pero que no encuentra en ninguna librería, y por lo tanto fallará. Wine crea una librería con una función OpenFile, de forma que tu programa de Windows la encuentra y puede seguir ejecutandose. Gallium3D viene a ser lo mismo pero para temas de 3D; es decir, si tu programa espera llamar a una función IDirect3D9::CreateDevice(), pues Gallium proporciona una implementación que hará las llamadas correspondientes a DRi o al Driver.
De todas formas, como ya te he dicho, si el tema de los gráficos te parece complicado/lioso en Linux, no empieces con el audio, que eso si es para cagarse.
Espero que esta chapa le sirva a alguien, y las correcciones serán bienvenidas, que como ya digo, no soy ningún experto del tema (aunque me ha tocado pegarme mucho con estas cosas)