SHADERS
La tecnología shaders es cualquier unidad escrita en un lenguaje de sombreado que se puede compilar independientemente. Es una tecnología reciente y que ha experimentado una gran evolución destinada a proporcionar al programador una interacción con la GPU hasta ahora imposible. Los shaders son utilizados para realizar transformaciones y crear efectos especiales, como por ejemplo iluminación, fuego o niebla. Para su programación los shaders utilizan lenguajes específicos de alto nivel que permitan la independencia del hardware.
Historia
En el 2000 la serie 2 de tarjetas GeForce permitía a la GPU hacerse cargo de funciones de transformación e iluminación que hasta ahora debía hacerlas la CPU, sin embargo no fue hasta la GeForce 3 (2001) que se incluyó la posibilidad de programarlas con la primera versión del modelo de sombreado. Existen numerosas versiones, se debe tener en cuenta que cuanto más reciente es la versión más limita el número de tarjetas gráficas sobre las que el programa puede operar correctamente.
Lenguajes de sombreado
Para la escritura de esas instrucciones, los programadores hacen uso de lenguajes de programación diseñados específicamente para ello. Cada uno de estos lenguajes de programación necesita enlazarse mediante una API, entre otras DirectX u OpenGL. Existen otros lenguajes pero los siguientes son los más conocidos.
HLSL es la implementación propiedad de Microsoft, la cual colaboró junto a Nvidia para crear un lenguaje de sombreado. Este lenguaje se debe utilizar junto a DirectX (la primera versión para la que se puede utilizar es DirectX 8.0). Anteriormente al DirectX 8 (DirectX 7, 6, 5...) se utilizaba otro método el cual era más complicado y complejo para ser utilizado. (Entre lo que era el lenguaje, creación de objetos, sonidos, partículas, entre otras).
GLSL es el lenguaje desarrollado por el grupo Khornox. Está diseñado específicamente para su uso dentro del entorno de OpenGL. Sus diseñadores afirman que se ha hecho un gran esfuerzo para lograr altos niveles de paralelismo. Su diseño se basa en C y RenderMan como modelo de lenguaje de sombreado.
CG lenguaje propiedad de la empresa Nvidia resultante de su colaboración con Microsoft para el desarrollo de un lenguaje de sombreado. Su principal ventaja es que puede ser usado por las APIs OpenGL y DirectX. Otra ventaja de este lenguaje es el uso de perfiles. Estos lenguajes no son totalmente independientes del hardware por lo tanto es recomendable crear programas específicos para diferentes tarjetas gráficas. Los perfiles de CG se encargan de elegir para su ejecución el más adecuado de los programas disponibles para el hardware.
A la hora de estudiar rendimientos es difícil aseverar nada. No sólo se deben tener en cuenta el fabricante (Nvidia o ATI) sino la versión del modelo de sombreado, el controlador instalado y el lenguaje usado. Usualmente mientras más avanzada sea la versión shaders la cantidad de objetos, texturas, efectos ambientales (Sol, Nubes 3D, Humos, Fuegos Realistas, Aguas, Iluminación) serán mayores con formas, colores y texturas más realistas.
Tipos de procesadores shader
A continuación se presentan los diferentes tipos de procesadores shader que la GPU tiene, las cantidades de cada uno crecen con celeridad entre generaciones de gráficas. Los shaders trabajan de la siguiente manera. El programador envía un conjunto de vértices que forman su escena gráfica a través de un lenguaje de propósito general. Todos los vértices pasan por el vertex shader donde pueden ser transformados y se determina su posición final. El siguiente paso es el geometry shader donde se pueden eliminar o añadir vértices. Posteriormente los vértices son ensamblados formando primitivas que son rasterizadas, proceso en el cual las superficies se dividen en puntos que corresponden a píxeles de la pantalla. El Píxel/Fragment shader se encarga de modificar estos puntos. Por último se producen cierto tests entre ellos el de profundidad que determina que punto es dibujado en pantalla.
Vertex shader: Permite transformaciones sobre coordenadas, normal, color, textura, etc. de un vértice. No puede saberse el orden entre vértices ni pasarse información entre ellos (esto ocurre también en el resto de tipos).
Geometry shader: Es capaz de generar nuevas primitivas dinámicamente así como de modificar existentes. Un ejemplo claro es la decisión de utilizar o eliminar vértices en una malla polígonal según la posición del observador aplicando la técnica Nivel de detalle.
Píxel/Fragment shader: En primer lugar aclarar la difererencia entre fragmento y píxel. Desde la Khronos group se apuesta por diferenciar que fragmento es lo que se procesa puesto que existen múltiples relacionados con un mismo píxel de la pantalla. La terminología seguida por Microsoft y Nvidia es la de píxel que puede dar lugar a confusión ya que no se trabaja con lo de la pantalla sino con los de cada figura. En este procesador se pueden hacer diversas transformaciones como cambiar la profundidad o trabajar con texels así como calcular efectos de iluminación con gran precisión. Todo lo ejecutado debe determinar el color que debería aplicarse sobre el píxel en caso de ser usado. También es útil para modificar la profundidad.
Vertex shader
Vertex shader es una herramienta capaz de trabajar con la estructura de vértices de los modelos tridimensionales y con ello realizar operaciones matemáticas modificando estas variables y así definiendo colores, texturas e incidencia de la luz. Esto da libertad a los programadores para realizar diferentes efectos desde la deformación de un objeto hasta la recreación de las olas del mar.
En caso de representaciones gráficas de pelo se basaría en los vértices de la malla dando un efecto más realista al resultado. Con lo que conlleva una rápida ejecución de la imagen puesto que se utiliza el hardware especifico, en este caso el de las tarjetas gráficas.
Lo que en realidad pretende esta herramienta es adicionar a una malla de polígonos elementos que se alojan en los vértices de dichos polígonos o simplemente modificarlos.
Incluido en Direct3D y OpenGL, el vertex shader puede reproducir diferentes efectos realistas. El vertex shader ha evolucionado con el tiempo encontrándose en la actualidad en la versión 5.0.
Programación
Para poder trabajar y programarlos se utilizan varios lenguajes, con diversos niveles de abstracción. Las tarjetas de video pueden ser programadas directamente a través de sus propias interfaces de lenguaje ensamblador, llamado para las GPUs ARB; sin embargo, la dificultad que esto conlleva y su poca portabilidad ha implicado el desarrollo de varios lenguajes que facilitan el proceso y "traducen" a la tarjeta de video las instrucciones. Microsoft ha desarrollado su alternativa en DirectX, llamada HLSL (High Level Shader Language) que vendría a ser un lenguaje de alto nivel bastante más fácil de programar que el ARB, con el cual también es posible realizar dichas tareas. También está disponible, a través de OpenGL el lenguaje GLSL, menos evolucionado que el anterior pero se conserva como una alternativa libre con la cual es posible conseguir el manejo de pixel y vertex shaders. Nvidia ha desarrollado también una alternativa propia para resolver el mismo problema en su hardware, llamado Cg.
Geometry shader
Un geometry shader (abreviado GS) es un modelo de programación de shader introducido con Shader Model 4.0 de DirectX 10. Las primeras tarjetas gráficas en soportar Geometry Shaders fueron las GPUs NVIDIA GeForce 8800. Esta característica es soportada en Direct 3D 10 y OpenGL 3.2 (o OpenGL 1.1 usando la extensión EXT_geometry_shader4).
Funcionamiento
Un geometry shader puede generar nuevas primitivas gráficas, como los puntos, las líneas o los triángulos, estas primitivas creadas son enviadas al principio del pipeline gráfico.
Los programas de geometry shader son ejecutados después de los vertex shaders. Toman como entrada toda la primitiva, a ser posible con información adjunta. Por ejemplo, cuando se operan triángulos, los tres vértices son la entrada del geometry shader. El shader puede emitir primitivas, que son rasterizadas y sus fragmentos al final son pasados al fragment shader.
Algunos de los típicos usos del geometry shader son, por ejemplo, la generación de un punto de sprite,1 teselado geométrico, extrusión del volumen de sombra y el renderizado de un solo paso a cube map.
Un ejemplo típico y muy usado, de los beneficios que aporta los geometry shaders podría ser la modificación automática de la complejidad de una malla. Una serie de líneas representan los puntos de control para una curva que es pasada al geometry shader y dependiendo de la complejidad requerida, el shader automáticamente puede generar líneas extra, cada una de las cuales permiten obtener una mejor aproximación de la curva.
Un programa de investigación dirigido por Gernot Ziegler,2 desarrollado por Histopyramids permite obtener mejor rendimiento que los geometry shaders en en multiples situaciones.3
Programación
Los Geometry shaders pueden ser programados en los siguientes lenguajes: Ensamblador, Cg, HLSL de Direct3D (empezando con DirectX 10) y GLSL de OpenGL.
Pixel shader
Un pixel shader (abreviatura PS) es un programa de sombreado, normalmente ejecutado en la unidad de procesamiento gráfico. En OpenGL se conoce como fragmento de sombreado.
Función
Un pixel shader sirve para manipular un píxel, o lo que es lo mismo, aplicar un efecto sobre la imagen (realismo, bump mapping, sombras, explosiones y efectos). Se trata de una función gráfica que calcula los efectos sobre una base per-pixel. Dependiendo de la resolución, una cantidad de 2 millones de píxeles puede ser necesario para ser renderizado,iluminado, sombreado, y color para cada marco.
Programación
Los píxel shaders están programados en los siguientes lenguajes: Ensamblador, Cg, GLS.
Hardware
El siguiente cuadro muestra un resumen, de las tarjetas gráficas gx4, que junto con el chip gráfico soporta la versión DirectX de pixel shader. Chips gráficos que generalmente son plenamente compatibles con qué versión de pixel shaders empezando por los primeros (v 1.1 en adelante).
(Los productos que todavía no están disponibles se indican con cursiva.)
PS version Direct3D version 3DLabs ATI Intel Matrox NVIDIA S3 Graphics SiS XGI
1.0/ 1.1 8.0 - - - - GeForce 3 series - Xabre-Series -
1.2 8.0a Wildcat VP - - - - - - -
1.3 8.0a - - - Parhelia series GeForce 4 Ti/4200Go series - Mirage 2 -
1.4 8.1 - Radeon R200 (8500-9250) - - - - - Volari V3 series (except V3XT)
2.0 9.0 Wildcat Realizm Radeon R300 (9500-9800, X300-X600) Intel GMA 900, 950, 3000, 3100 - - Delta Chrome, GammaChrome, Chrome S2x series Mirage 3, Mirage 3+ Volari V3XT, Volari V5 series, Volari V8 series, Volari 8300, Volari XP10
2.0a 9.0a - - - - GeForce FX series - - -
2.0b 9.0b - Radeon R420 (X700-X850) - - - - - -
3.0 9.0c - Radeon R520 (X1300-X1950) Intel GMA X3000 - GeForce 6 series, GeForce 7 series - - -
4.0 10 - Radeon R600 (HD 2400-HD 2600 2900) Intel GMA X3100, X3500 - GeForce 8 series, GeForce 9 Series, GeForce 200 Series, Quadro FX 1700 - Mirage 4 -
4.1 10.1 - Radeon R600 (HD 3xxx), Radeon R700 (HD 4xxx) Intel GMA 500 - - Chrome 400 Series -
5.0 11 - Radeon R800 (HD 5xxx) - GeForce 400 Series, GT100 Series - - -
.
API :Interfaz de Programación de Aplicaciones
Una interfaz de programación de aplicaciones o API (del inglés application programming interface) es el conjunto de funciones y procedimientos (o métodos, en la programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. Usados generalmente en las bibliotecas.
Características
Una interfaz de programación representa una interfaz de comunicación entre componentes de software. Se trata del conjunto de llamadas a ciertas bibliotecas que ofrecen acceso a ciertos servicios desde los procesos y representa un método para conseguir abstracción en la programación, generalmente (aunque no necesariamente) entre los niveles o capas inferiores y los superiores del software. Uno de los principales propósitos de una API consiste en proporcionar un conjunto de funciones de uso general, por ejemplo, para dibujar ventanas o iconos en la pantalla. De esta forma, los programadores se benefician de las ventajas de la API haciendo uso de su funcionalidad, evitándose el trabajo de programar todo desde el principio. Las APIs asimismo son abstractas: el software que proporciona una cierta API generalmente es llamado la implementación de esa API.
Por ejemplo, se puede ver la tarea de escribir "Hola Mundo" sobre la pantalla en diferentes niveles de abstracción:
Haciendo todo el trabajo desde el principio:
Traza, sobre papel milimetrado, la forma de las letras (y espacio) "H,o, l, a,M,u, n, d, o".
Crea una matriz de cuadrados negros y blancos que se asemeje a la sucesión de letras.
Mediante instrucciones en ensamblador, escribe la información de la matriz en la memoria intermedia ("buffer"

de pantalla.
Mediante la instrucción adecuada, haz que la tarjeta gráfica realice el volcado de esa información sobre la pantalla.
Por medio de un sistema operativo para hacer parte del trabajo:
Carga una fuente tipográfica proporcionada por el sistema operativo.
Haz que el sistema operativo borre la pantalla.
Haz que el sistema operativo dibuje el texto "Hola Mundo" usando la fuente cargada.
Usando una aplicación (que a su vez usa el sistema operativo) para realizar la mayor parte del trabajo:
Escribe un documento HTML con las palabras "Hola Mundo" para que un navegador Web como Mozilla, Firefox, Opera o Internet Explorer pueda representarlo en el monitor.
Como se puede ver, la primera opción requiere más pasos, cada uno de los cuales es mucho más complicado que los pasos de las opciones siguientes. Además, no resulta nada práctico usar el primer planteamiento para representar una gran cantidad de información, como un artículo enciclopédico sobre la pantalla, mientras que el segundo enfoque simplifica la tarea eliminando un paso y haciendo el resto más sencillos y la tercera forma simplemente requiere escribir "Hola Mundo". Sin embargo, las APIs de alto nivel generalmente pierden flexibilidad; por ejemplo, resulta mucho más difícil en un navegador web hacer girar texto alrededor de un punto con un contorno parpadeante que programarlo a bajo nivel. Al elegir usar una API se debe llegar a un cierto equilibrio entre su potencia, simplicidad y pérdida de flexibilidad.
Ejemplos de interfaces de programación
Microsoft WMI
Microsoft Win32 API
Microsoft Framework .NET
OpenGL
Java EE
API for SCSI device interfacing
The Carbon APIs for the Macintosh OS
Common Object Request Broker Architecture (CORBA)
Symfony para PHP
Drupal API
OpenGL
OpenGL (Open Graphics Library) es una especificación estándar que define una API multilenguaje y multiplataforma para escribir aplicaciones que produzcan gráficos 2D y 3D. La interfaz consiste en más de 250 funciones diferentes que pueden usarse para dibujar escenas tridimensionales complejas a partir de primitivas geométricas simples, tales como puntos, líneas y triángulos. Fue desarrollada originalmente por Silicon Graphics Inc. (SGI) en 19922 y se usa ampliamente en CAD, realidad virtual, representación científica, visualización de información y simulación de vuelo. También se usa en desarrollo de videojuegos, donde compite con Direct3D en plataformas Microsoft Windows.
Especificación
Fundamentalmente OpenGL es una especificación, es decir, un documento que describe un conjunto de funciones y el comportamiento exacto que deben tener. Partiendo de ella, los fabricantes de hardware crean implementaciones, que son bibliotecas de funciones que se ajustan a los requisitos de la especificación, utilizando aceleración hardware cuando es posible. Dichas implementaciones deben superar unos tests de conformidad para que sus fabricantes puedan calificar su implementación como conforme a OpenGL y para poder usar el logotipo oficial de OpenGL.
Hay implementaciones eficientes de OpenGL para Mac OS, Microsoft Windows, GNU/Linux, varias plataformas Unix y PlayStation 3. Existen también varias implementaciones en software que permiten ejecutar aplicaciones que dependen de OpenGL sin soporte de aceleración hardware. Es destacable la biblioteca de software libre / código abierto Mesa 3D, una API de gráficos basada sin aceleración hardware y completamente compatible con OpenGL. Sin embargo, para evitar los costes de la licencia requerida para ser denominada formalmente como una implementación de OpenGL, afirma ser simplemente una API muy similar.
La especificación OpenGL era revisada por el OpenGL Architecture Review Board (ARB), fundado en 1992. El ARB estaba formado por un conjunto de empresas interesadas en la creación de una API consistente y ampliamente disponible. Microsoft, uno de los miembros fundadores, abandonó el proyecto en 2003.
El 21 de septiembre de 2006 se anunció que el control de OpenGL pasaría del ARB al Grupo Khronos.3 Con ello se intentaba mejorar el marketing de OpenGL y eliminar las barreras entre el desarrollo de OpenGL y OpenGL ES.4 ARB se convirtió dentro de Khronos en el OpenGL ARB Working Group.5 El subgrupo de Khronos que gestiona la especificación de OpenGL se denomina OpenGL ARB Working Group.6 Para una relación de los miembros que componen el OpenGL ARB Working Group, véase el apartado Miembros del Grupo Khronos. El gran número de empresas con variados intereses que han pasado tanto por el antiguo ARB como por el grupo actual han hecho de OpenGL una API de propósito general con un amplio rango de posibilidades.
Mark Segal y Kurt Akeley fueron los autores de la especificación original de OpenGL. Chris Frazier fue el editor de la versión 1.1. Jon Leech ha editado las versiones desde 1.2 hasta la presente 3.0.7
Diseño
OpenGL tiene dos propósitos esenciales:
Ocultar la complejidad de la interfaz con las diferentes tarjetas gráficas, presentando al programador una API única y uniforme.
Ocultar las diferentes capacidades de las diversas plataformas hardware, requiriendo que todas las implementaciones soporten la funcionalidad completa de OpenGL (utilizando emulación software si fuese necesario).
El funcionamiento básico de OpenGL consiste en aceptar primitivas tales como puntos, líneas y polígonos, y convertirlas en píxeles. Este proceso es realizado por una pipeline gráfica conocida como la Máquina de estados de OpenGL.8 La mayor parte de los comandos de OpenGL o bien emiten primitivas a la pipeline gráfica o bien configuran cómo la pipeline procesa dichas primitivas. Hasta la aparición de la versión 2.0 cada etapa de la pipeline ejecutaba una función prefijada, resultando poco configurable. A partir de la versión 2.0 algunas etapas son programables usando un lenguaje de programación llamado GLSL.
OpenGL es una API basada en procedimientos de bajo nivel que requiere que el programador dicte los pasos exactos necesarios para renderizar una escena. Esto contrasta con las APIs descriptivas, donde un programador sólo debe describir la escena y puede dejar que la biblioteca controle los detalles para representarla. El diseño de bajo nivel de OpenGL requiere que los programadores conozcan en profundidad la pipeline gráfica, a cambio de darles libertad para implementar algoritmos gráficos novedosos.
OpenGL ha influido en el desarrollo de las tarjetas gráficas, promocionando un nivel básico de funcionalidad que actualmente es común en el hardware comercial; algunas de esas contribuciones son:
-Primitivas básicas de puntos, líneas y polígonos rasterizados.
-Proceso en la pipeline de gráficos.
-Una pipeline de transformación e iluminación.
-Z-buffering.
-Mapeado de texturas.
-Alpha blending.
Una descripción somera del proceso en la pipeline gráfica podría ser:
-Evaluación, si procede, de las funciones polinomiales que definen ciertas entradas, como las superficies NURBS, aproximando curvas y la geometría de la superficie.
-Operaciones por vértices, transformándolos, iluminándolos según su material y recortando partes no visibles de la escena para producir un volumen de visión.
-Rasterización, o conversión de la información previa en píxeles. Los polígonos son representados con el color adecuado mediante algoritmos de interpolación.
-Operaciones por fragmentos o segmentos, como actualizaciones según valores venideros o ya almacenados de profundidad y de combinaciones de colores, entre otros.
-Por último, los fragmentos son volcados en el Frame buffer.
Muchas tarjetas gráficas actuales proporcionan una funcionalidad superior a la básica aquí expuesta, pero las nuevas características generalmente son mejoras de esta pipeline básica más que cambios revolucionarios de ella.
Historia
En los años 1980 el desarrollo de software que fuese compatible con un amplio rango de hardware gráfico era un verdadero reto para los desarrolladores. Había que tratar con interfaces muy diferentes y escribir drivers específicos para cada tipo de hardware, resultando muy costoso; por ello, se subcontrataban equipos de programadores para agilizar el desarrollo. Dado que cada equipo trabajaba por separado en sus interfaces, se producía mucho código redundante. Además, era un proceso caro, por lo que varios grupos innovadores aceptaron el reto de encontrar un método mejor.
Al principio de los años 1990 SGI era un grupo de referencia en gráficos 3D para estaciones de trabajo. Suya era la API IRIS GL,10 considerada puntera en el campo y estándar de facto, llegando a eclipsar a PHIGS, basada en estándares abiertos. IRIS GL se consideraba más fácil de usar y, lo más importante, soportaba renderizado en modo inmediato. Además, PHIGS, aparte de su mayor dificultad, fue considerada inferior a IRIS GL respecto a funcionalidad y capacidad.
La competencia de SGI (Sun Microsystems, Hewlett-Packard e IBM, entre otros) fue capaz de introducir en el mercado hardware 3D compatible con el estándar PHIGS mediante extensiones. Esto fue reduciendo la cuota de mercado de SGI conforme iban entrando diferentes proveedores en el mercado. Por todo ello, en un intento de fortalecer su influencia en el mercado, SGI decidió convertir el estándar IRIS GL en un estándar abierto.
SGI observó que la API IRIS GL no podía ser abierta debido a conflictos de licencias y patentes; también contenía funciones no relevantes para los gráficos 3D como APIs para ventanas, teclado o ratón (en parte, porque fue desarrollada antes de la aparición del X Window System o de los sistemas NeWS de Sun). Además, mientras iba madurando el soporte del mercado para el nuevo estándar, se pretendía mantener los antiguos clientes mediante bibliotecas añadidas como Iris Inventor o Iris Performer.
El resultado de todo lo anterior fue el lanzamiento del estándar OpenGL.
Algunos de los logros que se consiguieron fueron:
Estandarizar el acceso al hardware.
Trasladar a los fabricantes la responsabilidad del desarrollo de las interfaces con el hardware.
Delegar las funciones para ventanas al sistema operativo.
Con la variedad de hardware gráfico existente, lograr que todos hablasen el mismo lenguaje obtuvo un efecto importante, ofreciendo a los desarrolladores de software una plataforma de alto nivel sobre la que trabajar.
En 1992,11 SGI lideró la creación del OpenGL Architecture Review Board (OpenGL ARB), grupo de empresas que mantendría y extendería la especificación OpenGL en los años siguientes. OpenGL evolucionó desde IRIS GL, superando su problema de dependencia del hardware al ofrecer emulación software para aquellas características no soportadas por el hardware del que se dispusiese. Así, las aplicaciones podían utilizar gráficos avanzados en sistemas relativamente poco potentes.
En 1994 SGI barajó la posibilidad de lanzar un producto denominado OpenGL++, el cual incluía elementos como una API de scene-graph (basada presumiblemente en la tecnología de Performer). Dicha especificación fue divulgada entre unos pocos grupos interesados, pero nunca apareció finalmente como producto.12
En 1995 Microsoft lanzó Direct3D, que se convertiría en el principal competidor de OpenGL. El 17 de diciembre de 199713 Microsoft y SGI iniciaron el proyecto Fahrenheit, esfuerzo cooperativo con el objetivo de unificar las interfaces de OpenGL y Direct3D (y añadir también una API scene-graph). En 1998 se uniría al proyecto Hewlett-Packard.14 Pese a tener un principio prometedor en estandarizar las APIs de gráficos 3D, debido a restricciones financieras en SGI y la falta general de apoyo por parte de la industria, fue finalmente abandonado en 1999.15
Documentación
La popularidad de OpenGL se debe en parte a su detallada documentación oficial. El OpenGL ARB ha publicado una serie de manuales actualizados conforme la API iba evolucionando. Son fácilmente reconocibles (y conocidos) por el color de sus tapas:
El Libro Rojo - The Red Book: The OpenGL Programmer's guide. ISBN 0-321-33573-2
Libro de referencia y tutorial. Considerado libro de cabecera para programadores de OpenGL.
El Libro Azul - The Blue Book: The OpenGL Reference manual. ISBN 0-321-17383-X
En esencia, una copia de la páginas del man de OpenGL.
Incluye un poster desplegable con el diagrama de la estructura de una implementación ideal de OpenGL.
El Libro Verde - The Green Book: Programming OpenGL for the X Window System. ISBN 0-201-48359-9
Libro sobre el interfaz X11 y GLUT.
El Libro Alpha (de tapa blanca) - The Alpha Book: OpenGL Programming for Windows 95 and Windows NT. ISBN 0-201-40709-4
Libro sobre el interfaz de OpenGL en plataformas de Microsoft Windows.
Para OpenGL 2.0 y posteriores:
El Libro Naranja - The Orange Book: The OpenGL Shading Language. ISBN 0-321-33489-2
Libro de referencia y tutorial para GLSL.
Extensiones
El estándar OpenGL permite a los fabricantes añadir nuevas funcionalidades adicionales mediante extensiones conforme aparecen nuevas tecnologías. Dichas extensiones pueden introducir nuevas funciones y constantes, y suavizar o incluso eliminar restricciones en funciones ya existentes. Cada fabricante dispone de una abreviatura que le identifica en el nombre de sus nuevas funciones o constantes. Por ejemplo, la abreviatura de NVIDIA (NV) aparece en la definición de su función glCombinerParameterfvNV() y su constante GL_NORMAL_MAP_NV.
Es posible que varios fabricantes se pongan de acuerdo en implementar la misma funcionalidad extendida. En ese caso, se usa la abreviatura EXT. Incluso puede ocurrir que el ARB adopte la extensión, convirtiéndose así en estándar y utilizando la abreviatura ARB en sus nombres. La primera extensión ARB fue GL_ARB_multitexture, presentada en la versión 1.2.1. Siguiendo el camino marcado por la extensión, el multitexturing no es ya una extensión opcional, sino que entró a formar parte del núcleo de OpenGL desde la versión 1.3.
Antes de usar una extensión, los programas deben comprobar su disponibilidad y, después, acceder a las nuevas funcionalidades ofrecidas. Este proceso es dependiente de la plataforma, pero bibliotecas como GLEW y GLEE lo simplifican.
Las especificaciones para la mayor parte de las extensiones pueden encontrarse en el registro oficial de extensiones.
ACA ENCONTRE UN TUTORIAL MUY BUENO DE COMO PROGRAMAR , LO QUE TIENE QUE ESTA EN INGLES
DirectX
DirectX es una colección de API creadas y recreadas para facilitar las complejas tareas relacionadas con multimedia, especialmente programación de juegos y vídeo en la plataforma Microsoft Windows.
DirectX consta de las siguientes APIs:
Direct3D: utilizado para el procesamiento y la programación de gráficos en tres dimensiones (una de las características más usadas de DirectX).
Direct Graphics: para dibujar imágenes en dos dimensiones (planas), y para representar imágenes en tres dimensiones.
DirectInput: para procesar datos del teclado, mouse, joystick y otros controles para juegos.
DirectPlay: para comunicaciones en red.
DirectSound: para la reproducción y grabación de sonidos de ondas.
DirectMusic: para la reproducción de pistas musicales compuestas con DirectMusic Producer.
DirectShow: para reproducir audio y vídeo con transparencia de red.
DirectSetup: para la instalación de componentes DirectX.
DirectCompute: lenguaje e instrucciones especiales para el manejo de cientos o miles de hilos de procesamiento, especial para procesadores de nucleos masivos.
A pesar de ser desarrollado exclusivamente para la plataforma Windows, se está desarrollando una implementación de código abierto de su API para sistemas Unix (en particular Linux) y X Window System por el proyecto WineHQ, del cual existe fork propietario, Cedega, desarrollada por la empresa de software Transgaming y orientada a la ejecución de juegos desarrollados para Windows bajo sistemas Unix.
Historial de lanzamientos
Versión de DirectX Número de versión Sistema Operativo Fecha de Lanzamiento
DirectX 5.2 4.05.01.1998 Windows 98 5 de mayo de 1998
DirectX 6.0 4.06.00.0318 Windows CE para la Dreamcast 7 de agosto de 1998
DirectX 8.0a 4.08.00.0400 (RC14) + parches de instalación Última versión para
Windows 95 7 de noviembre de 2000
DirectX 8.1 4.08.01.0810
4.08.01.0881 (RC7) Windows XP 12 de noviembre de 2001
DirectX 9.0 4.09.00.0900 Windows Server 2003 19 de diciembre de 2002
DirectX 9.0a 4.09.00.0901 26 de marzo de 2003
DirectX 9.0b 4.09.00.0902 (RC2) 13 de agosto de 2003
DirectX 9.0c 4.09.00.0904 (RC0) Windows XP SP2, Windows Server 2003 SP1, y Xbox 360. Última versión exclusiva para 32-bit. 13 de diciembre de 2004
DirectX 9.0c 4.09.00.0904 Compatible con todos los Sistemas Windows que soporten 9.0c (RC0) Primera versión en incluir D3DX DLLs 9 de diciembre de 2005
DirectX 9.0c - actualizaciones bimensuales 4.09.00.0904 Desde agosto del 2005 hasta el presente. Última versión: Junio de 2010
DirectX 10 6.00.6000.16386 Exclusivo de Windows Vista 30 de noviembre de 2006
6.00.6001.18000 Service Pack 1 para Windows Vista, Windows Server 2008
incluye Direct3D 10.1 4 de febrero de 2008
6.00.6002.18005 Service Pack 2 para Windows Vista, Windows Server 2008
incluye Direct3D 10.1 28 de abril de 2009
DirectX 11 6.01.7600.16385 Windows 7 y Windows Server 2008 R2 22 de octubre de 2009
7.00.6002.18107 Windows Vista SP2 y Windows Server 2008 SP2, mediante la actualización de plataforma para Windows Vista y Windows Server 20081 27 de octubre de 2009
DirectX 10
Como cambio mayor en la API DirectX, DirectX 10 es lanzado junto a Windows Vista y es exclusivo de este sistema; versiones anteriores de Windows no pueden ejecutar aplicaciones exclusivas de DirectX 10 de manera oficial.2
Muchas partes de la API fueron sacadas en el último DirectX SDK y se mantienen únicamente con motivos de compatibilidad: DirectInput fue retirado en favor de XInput, DirectSound fue reemplazado por XACT con la consecuente pérdida de soporte de aceleración de hardware, debido a nuevas características en la pila de audio de Windows Vista, la cual renderiza el audio directamente al procesador.
Para mantener una compatibilidad hacia atrás, DirectX de Windows Vista contiene muchas versiones de Direct3D:3
Direct3D 9: emula el comportamiento de Direct3D 9 como lo era en Windows XP. Las ventajas del nuevo Windows Display Driver Model de Vista no son mostradas a la aplicación si no están instalados controladores WDDM.
Direct3D 9Ex: permite acceso total a las nuevas capacidades de WDDM (si están instalados controladores compatibles con WDDM) a la vez que se mantiene compatibilidad con aplicaciones Direct3D existentes. La interfaz de usuario Windows Aero trabaja en D3D 9Ex.
Direct3D 10: Diseñada alrededor del nuevo modelo de controlador de Windows Vista y proporcionando muchas mejoras a las capacidades y flexibilidad de renderizado, incluyendo el Shader Model 4.
Direct3D 10.1 es una actualización incremental de Direct3D 10, la cual se incluye y requiere de Windows Vista Service Pack 1. Esta release sólo determina algunos estándares de calidad para los fabricantes de tarjetas gráficas, a la vez que proporciona a desarrolladores más control en la calidad de la imagen.4 También incluye una serie de nuevos requerimientos mínimos al hardware, como Shader Model 4.1 y operaciones de punto flotante de 32-bit. Direct3D 10.1 soporta completamente el hardware Direct3D 10, pero para acceder a las nuevas características se necesita de una tarjeta nueva.
Sin embargo hay que tener en consideración, que a pesar de que Microsoft trato de mantener en DirectX 10 cierta compatibilidad hacia atrás, hay programas (especialmente videojuegos creados antes de la aparición de DirectX 10) que requieren tener instalado algunos de los archivos de DirectX 9; pero los cuales no fueron considerados que estuvieran presentes en la versión DirectX 10. Debido a ello igualmente a los usuarios de Windows Vista, se les sugiere también haber instalado la última versión de DirectX 9.0c (actualizaciones bimensuales); con el objetivo de mejorar la compatibilidad entre Windows Vista y los programas que requieran DirectX 9 (ambas versiones de DirectX son compatibles, ya que solo serán instalados los archivos que no están presentes en la versión posterior de DirectX; con lo cual DirectX 10 aún permanecerá como la versión instalada en Windows Vista).
DirectX 11
DirectX ® 11, la próxima generación de tecnología de gráficos, llega con Windows 7. Esta es una gran noticia para los jugadores ya que muchos de los más nuevos juegos para Windows aprovechan al máximo esta tecnología para crear mundos de manera más inmersiva y detallada, tanto como para mejorar las experiencias visuales. Los desarrolladores de juegos utilizan las nuevas características para crear mundos ricos, personajes realistas, y hacer más fluido el juego.
DirectX 11 características, incluyen:
Teselación - Teselación se ejecuta sobre la GPU para calcular una superficie más suave curva que resulta en imágenes detalladas de manera más gráfica, incluyendo más personajes llenos de vida en los mundos de juego que explorar.
Multi-Threading - La capacidad de las escalas dentro de las CPUs Multinúcleo permitirá a los desarrolladores aprovechar mejor el poder dentro de ellas. El resultado sera FPS más rápidos para los juegos, sin dejar de apoyar el mayor detalle visual posible.
DirectCompute - Los desarrolladores pueden utilizar la potencia de las tarjetas gráficas discretas (De gama Baja) para acelerar los juegos y aplicaciones. Esto mejora los gráficos, al mismo tiempo permitiendo a los jugadores acelerar las tareas diarias, como la edición de vídeo, en su PC de Windows.
Mientras que Windows 7 es totalmente compatible con los juegos y el hardware que utilizan las versiones anteriores de DirectX, las características del nuevo DirectX 11 están disponibles solo con DirectX 11 y una tarjeta gráfica compatible con juegos diseñados para aprovechar esta nueva tecnología.
GPU : Unidad de procesamiento gráfico
La unidad de procesamiento gráfico o GPU (acrónimo del inglés graphics processing unit) es un procesador dedicado exclusivamente al procesamiento de gráficos, para aligerar la carga de trabajo del procesador central en aplicaciones como los videojuegos y o aplicaciones 3D interactivas. De esta forma, mientras gran parte de lo relacionado con los gráficos se procesa en la GPU, la CPU puede dedicarse a otro tipo de cálculos (como la inteligencia artificial o los cálculos mecánicos en el caso de los videojuegos).
Una GPU implementa ciertas operaciones gráficas llamadas primitivas optimizadas para el procesamiento gráfico. Una de las primitivas más comunes para el procesamiento gráfico en 3D es el antialiasing, que suaviza los bordes de las figuras para darles un aspecto más realista. Adicionalmente existen primitivas para dibujar rectángulos, triángulos, círculos y arcos. Las GPU actualmente disponen de gran cantidad de primitivas, buscando mayor realismo en los efectos.
Historia
Las modernas GPU son descendientes de los chips gráficos monolíticos de finales de la década de 1970 y 1980. Estos chips tenían soporte BitBLT limitado en la forma de sprites (si es que tenían dicho soporte del todo), y usualmente no tenían soporte para dibujo de figuras. Algunos GPU podían ejecutar varias operaciones en una lista de "display" y podían usar DMA para reducir la carga en el procesador anfitrión; un ejemplo temprano es el coprocesador ANTIC usado en el Atari 800 y el Atari 5200. Hacia finales de los 80 y principios de los 90, microprocesadores de propósito general de alta velocidad fueron muy populares para implementar los GPUs más avanzados. Muchas (muy caras) tarjetas gráficas para PCs y Estaciones de Trabajo usaban Procesadores Digitales de Señales (DSP por sus siglas en inglés) tales como la serie TMS340 de Texas Instruments, para implementar funciones de dibujo rápidas y muchas impresoras laser contenían un procesador de barrido de imágenes "PostScript" (un caso especial de GPU) corriendo en un procesador RISC como el AMD 29000.
Conforme la tecnología de proceso de semiconductores fue mejorando, eventualmente fue posible mover las funciones de dibujo y las BitBLT a la misma placa y posteriormente al mismo chip a manera de un controlador de buffer de "marcos"(frames), tal como VGA. Estos aceleradores gráficos de 2D "reducidos" no eran tan flexibles como los basados en microprocesadores, pero eran mucho más fáciles de hacer y vender. La Commodore AMIGA fue la primera computadora de producción en masa que incluía una unidad blitter y el sistema gráfico IBM 8514 fue una de las primeras tarjetas de video para PC en implementar primitivas 2D en hardware.
Diferencias con la CPU
Si bien en un computador genérico no es posible reemplazar la CPU por una GPU, hoy en día las GPU son muy potentes y pueden incluso superar la frecuencia de reloj de una CPU antigua (más de 500MHz). Pero la potencia de las GPU y su dramático ritmo de desarrollo reciente se deben a dos factores diferentes. El primer factor es la alta especialización de las GPU, ya que al estar pensadas para desarrollar una sola tarea, es posible dedicar más silicio en su diseño para llevar a cabo esa tarea más eficientemente. Por ejemplo, las GPU actuales están optimizadas para cálculo con valores en coma flotante, predominantes en los gráficos 3D.
Por otro lado, muchas aplicaciones gráficas conllevan un alto grado de paralelismo inherente, al ser sus unidades fundamentales de cálculo (vértices y píxeles) completamente independientes. Por tanto, es una buena estrategia usar la fuerza bruta en las GPU para completar más calculos en el mismo tiempo. Los modelos actuales de GPU suelen tener una media docena de procesadores de vértices (que ejecutan Vertex Shaders), y hasta dos o tres veces más procesadores de fragmentos o píxeles (que ejecutan Pixel Shaders (O Fragment Shaders)). De este modo, una frecuencia de reloj de unos 600-800MHz (el estándar hoy en día en las GPU de más potencia), muy baja en comparación con lo ofrecido por las CPU (3.8-4 GHz en los modelos más potentes[no necesariamente más eficientes]), se traduce en una potencia de cálculo mucho mayor gracias a su arquitectura en paralelo.
Una de las mayores diferencias con la CPU estriba en su arquitectura. A diferencia del procesador central, que tiene una arquitectura de von Neumann, la GPU se basa en el Modelo Circulante. Este modelo facilita el procesamiento en paralelo, y la gran segmentación que posee la GPU para sus tareas.
Arquitectura de la GPU
Una GPU está altamente segmentada, lo que indica que posee gran cantidad de unidades funcionales. Estas unidades funcionales se pueden dividir principalmente en dos: aquéllas que procesan vértices, y aquéllas que procesan píxeles. Por tanto, se establecen el vértice y el píxel como las principales unidades que maneja la GPU.
Adicionalmente, y no con menos importancia, se encuentra la memoria. Ésta destaca por su rapidez, y va a jugar un papel relevante a la hora de almacenar los resultados intermedios de las operaciones y las texturas que se utilicen.
Inicialmente, a la GPU le llega la información de la CPU en forma de vértices. El primer tratamiento que reciben estos vértices se realiza en el vertex shader. Aquí se realizan transformaciones como la rotación o el movimiento de las figuras. Tras esto, se define la parte de estos vértices que se va a ver (clipping), y los vértices se transforman en píxeles mediante el proceso de rasterización. Estas etapas no poseen una carga relevante para la GPU.
Donde sí se encuentra el principal cuello de botella del chip gráfico es en el siguiente paso: el pixel shader. Aquí se realizan las transformaciones referentes a los píxeles, tales como la aplicación de texturas. Cuando se ha realizado todo esto, y antes de almacenar los píxeles en la caché, se aplican algunos efectos como el antialiasing, blending y el efecto niebla.
Otras unidades funcionales llamadas ROP toman la información guardada en la caché y preparan los píxeles para su visualización. También pueden encargarse de aplicar algunos efectos. Tras esto, se almacena la salida en el frame buffer. Ahora hay dos opciones: o tomar directamente estos píxeles para su representación en un monitor digital, o generar una señal analógica a partir de ellos, para monitores analógicos. Si es este último caso, han de pasar por un DAC, Digital-Analog Converter, para ser finalmente mostrados en pantalla.
Programación de la GPU
Al inicio, la programación de la GPU se realizaba con llamadas a servicios de interrupción de la BIOS. Tras esto, la programación de la GPU se empezó a hacer en el lenguaje ensamblador específico a cada modelo. Posteriormente, se situó un nivel más entre el hardware y el software, diseñando las API (Application Program Interface), que proporcionaban un lenguaje más homogéneo para los modelos existentes en el mercado. El primer API usado ampliamente fue estándar abierto OpenGL (Open Graphics Language), tras el cuál Microsoft desarrolló DirectX.
Tras el desarrollo de APIs, se decidió crear un lenguaje más natural y cercano al programador, es decir, desarrollar un lenguajes de alto nivel para gráficos. Por ello, de OpenGL y DirectX surgieron estas propuestas. El lenguaje estándar de alto nivel, asociado a la biblioteca OpenGL es el "OpenGL Shading Language", GLSL, implementado en principio por todos los fabricantes. La empresa californiana NVIDIA creó un lenguage propietario llamado Cg (del inglés, "C for graphics"

, con mejores resultados que GLSL en las pruebas de eficiencia. En colaboración con NVIDIA, Microsoft desarrolló su "High Level Shading Language", HLSL, prácticamente idéntico a Cg, pero con ciertas incompatibilidades menores.
Otros
Se intenta aprovechar la gran potencia de cálculo de las GPU para aplicaciones no relacionadas con los gráficos, en lo que desde recientemente se viene a llamar GPGPU, o GPU de propósito general (General Purpose GPU, en sus siglas en inglés).
HARDWARE DE VIDEO E HISTORIA:
Una tarjeta gráfica, tarjeta de vídeo, placa de vídeo, tarjeta aceleradora de gráficos o adaptador de pantalla, es una tarjeta de expansión para una computadora, encargada de procesar los datos provenientes de la CPU y transformarlos en información comprensible y representable en un dispositivo de salida, como un monitor o televisor. Las tarjetas gráficas más comunes son las disponibles para las computadoras compatibles con la IBM PC, debido a la enorme popularidad de éstas, pero otras arquitecturas también hacen uso de este tipo de dispositivos.
Es habitual que se utilice el mismo término tanto a las habituales tarjetas dedicadas y separadas como a las GPU integradas en la placa base.
Algunas tarjetas gráficas han ofrecido funcionalidades añadidas como captura de vídeo, sintonización de TV, decodificación MPEG-21 y MPEG-4 o incluso conectores Firewire, de ratón, lápiz óptico o joystick.
Las tarjetas gráficas no son dominio exclusivo de los PC; contaron o cuentan con ellas dispositivos como los Commodore Amiga (conectadas mediante las ranuras Zorro II y Zorro III), Apple II, Apple Macintosh, Spectravideo SVI-328, equipos MSX y, por supuesto, en las videoconsolas modernas, como la Wii, la Playstation 3 y la Xbox360.
La historia de las tarjetas gráficas da comienzo a finales de los años 1960, cuando se pasa de usar impresoras como elemento de visualización a utilizar monitores. Las primeras tarjetas sólo eran capaces de visualizar texto a 40x25 u 80x25, pero la aparición de los primeros chips de video como el Motorola 6845 permiten comenzar a dotar a los equipos basados en bus S-100 o Eurocard de capacidades gráficas. Junto con las tarjetas que añadían un modulador de televisión fueron las primeras en recibir el término tarjeta de video.
El éxito del ordenador doméstico y las primeras videoconsolas hacen que por abaratamiento de costos (principalmente son diseños cerrados), esos chips vayan integrados en la placa madre. Incluso en los equipos que ya vienen con un chip gráfico se comercializan tarjetas de 80 columnas, que añadían un modo texto de 80x24 u 80x25 caracteres, principalmente para ejecutar soft CP/M (como las de los Apple II y Spectravideo SVI-328).
Curiosamente la tarjeta de vídeo que viene con el IBM PC, que con su diseño abierto herencia de los Apple II popularizará el concepto de tarjeta gráfica intercambiable, es una tarjeta de sólo texto. La MDA (Monochrome Display Adapter), desarrollada por IBM en 1981, trabajaba en modo texto y era capaz de representar 25 líneas de 80 caracteres en pantalla. Contaba con una memoria de vídeo de 4KB, por lo que sólo podía trabajar con una página de memoria. Se usaba con monitores monocromo, de tonalidad normalmente verde.2
A partir de ahí se sucedieron diversas controladoras para gráficos, resumidas en la tabla adjunta.
Año Modo texto Modo gráficos Colores Memoria
MDA 1981 80*25 - 1 4 KB
CGA 1981 80*25 640*200 4 16 KB
HGC 1982 80*25 720*348 1 64 KB
EGA 1984 80*25 640*350 16 256 KB
IBM 8514 1987 80*25 1024*768 256 -
MCGA 1987 80*25 320*200 256 -
VGA 1987 720*400 640*480 256 256 KB
SVGA 1989 80*25 1024*768 256 1 MB
XGA 1990 80*25 1024*768 65K 2 MB
VGA tuvo una aceptación masiva, lo que llevó a compañías como ATI, Cirrus Logic y S3 Graphics, a trabajar sobre dicha tarjeta para mejorar la resolución y el número de colores. Así nació el estándar SVGA (Super VGA). Con dicho estándar se alcanzaron los 2 MB de memoria de vídeo, así como resoluciones de 1024 x 768 puntos a 256 colores.
Los competidores del PC, Commodore Amiga 2000 y Apple Macintosh reservaron en cambio esa posibilidad a ampliaciones profesionales, integrando casi siempre la GPU base (que batía en potencia con total tranquilidad a las tarjetas gráficas de los PC del momento) en sus placas madre. Esta situación se perpetúa hasta la aparición del Bus PCI, que sitúa a las tarjetas de PC al nivel de los buses internos de sus competidores, al eliminar el cuello de botella que representaba el Bus ISA. Aunque siempre por debajo en eficacia (con la misma GPU S3 ViRGE, lo que en un PC es una tarjeta gráfica avanzada deviene en acelerador 3D profesional en los Commodore Amiga con ranura Zorro III), la fabricación masiva (que abarata sustancialmente los costes) y la adopción por otras plataformas del Bus PCI hace que los chips gráficos VGA comiencen a salir del mercado del PC.
La evolución de las tarjetas gráficas dio un giro importante en 1995 con la aparición de las primeras tarjetas 2D/3D, fabricadas por Matrox, Creative, S3 y ATI, entre otros. Dichas tarjetas cumplían el estándar SVGA, pero incorporaban funciones 3D. En 1997, 3dfx lanzó el chip gráfico Voodoo, con una gran potencia de cálculo, así como nuevos efectos 3D (Mip Mapping, Z-Buffering, Antialiasing...). A partir de ese punto, se suceden una serie de lanzamientos de tarjetas gráficas como Voodoo2 de 3dfx, TNT y TNT2 de NVIDIA. La potencia alcanzada por dichas tarjetas fue tal que el puerto PCI donde se conectaban se quedó corto. Intel desarrolló el puerto AGP (Accelerated Graphics Port) que solucionaría los cuellos de botella que empezaban a aparecer entre el procesador y la tarjeta. Desde 1999 hasta 2002, NVIDIA dominó el mercado de las tarjetas gráficas (comprando incluso la mayoría de bienes de 3dfx)7 con su gama GeForce. En ese período, las mejoras se orientaron hacia el campo de los algoritmos 3D y la velocidad de los procesadores gráficos. Sin embargo, las memorias también necesitaban mejorar su velocidad, por lo que se incorporaron las memorias DDR a las tarjetas gráficas. Las capacidades de memoria de vídeo en la época pasan de los 32 MB de GeForce, hasta los 64 y 128 MB de GeForce 4.
La mayoría de videoconsolas de sexta generación y sucesivos utilizan chips gráficos derivados de los más potentes aceleradores 3D de su momento. Los Apple Macintosh incorporan chips de NVIDIA y ATI desde el primer iMac, y los modelos PowerPC con bus PCI o AGP pueden usar tarjetas gráficas de PC con BIOS no dependientes de CPU.
En 2006, NVIDIA y ATI se repartían el liderazgo del mercado8 con sus series de chips gráficos GeForce y Radeon, respectivamente.
Componentes
GPU
La GPU, —acrónimo de «graphics processing unit», que significa «unidad de procesamiento gráfico»— es un procesador (como la CPU) dedicado al procesamiento de gráficos; su razón de ser es aligerar la carga de trabajo del procesador central y, por ello, está optimizada para el cálculo en coma flotante, predominante en las funciones 3D. La mayor parte de la información ofrecida en la especificación de una tarjeta gráfica se refiere a las características de la GPU, pues constituye la parte más importante de la tarjeta. Dos de las más importantes de dichas características son la frecuencia de reloj del núcleo, que en 2006 oscilaba entre 250 MHz en las tarjetas de gama baja y 750 MHz en las de gama alta, y el número de pipelines (vertex y fragment shaders), encargadas de traducir una imagen 3D compuesta por vértices y líneas en una imagen 2D compuesta por píxeles.
Memoria de vídeo
Tecnología Frecuencia (MHz) Ancho de banda (GB/s)
GDDR 166 - 950 1,2 - 30,4
GDDR2 533 - 1000 8,5 - 16
GDDR3 700 - 1700 5,6 - 54,4
GDDR4 1600 - 1800 64 - 86,4
GDDR5 3200 - 7000 24 - 448
Según la tarjeta gráfica esté integrada en la placa base (bajas prestaciones) o no, utilizará la memoria RAM propia del ordenador o dispondrá de una propia. Dicha memoria es la memoria de vídeo o VRAM. Su tamaño oscila entre 128 MB y 4 GB. La memoria empleada en 2006 estaba basada en tecnología DDR, destacando GDDR2, GDDR3,GDDR4 y GDDR5. La frecuencia de reloj de la memoria se encontraba entre 400 MHz y 3,6 GHz.
Samsung ha conseguido hacer memorias GDDR5 a 7GHZ, gracias al proceso de reducción de 50 nm, permitiendo un gran ancho de banda en buses muy pequeños (incluso de 64 bits)
Una parte importante de la memoria de un adaptador de vídeo es el Z-Buffer, encargado de gestionar las coordenadas de profundidad de las imágenes en los gráficos 3D.
RAMDAC
El RAMDAC es un conversor de señal digital a analógico de memoria RAM. Se encarga de transformar las señales digitales producidas en el ordenador en una señal analógica que sea interpretable por el monitor. Según el número de bits que maneje a la vez y la velocidad con que lo haga, el conversor será capaz de dar soporte a diferentes velocidades de refresco del monitor (se recomienda trabajar a partir de 75 Hz, nunca con menos de 60).9 Dada la creciente popularidad de los monitores digitales el RAMDAC está quedando obsoleto, puesto que no es necesaria la conversión analógica si bien es cierto que muchos conservan conexión VGA por compatibilidad.
[u]Salidas[/u]
Salidas SVGA, S-Video y DVI de una tarjeta gráfica
Los sistemas de conexión más habituales entre la tarjeta gráfica y el dispositivo visualizador (como un monitor o un televisor) son:
DA-15 conector RGB usado mayoritariamente en los Apple Macintosh
Digital TTL DE-9 : usado por las primitivas tarjetas de IBM (MDA, CGA y variantes, EGA y muy contadas VGA)
SVGA: estándar analógico de los años 1990; diseñado para dispositivos CRT, sufre de ruido eléctrico y distorsión por la conversión de digital a analógico y el error de muestreo al evaluar los píxeles a enviar al monitor.
DVI: sustituto del anterior, fue diseñado para obtener la máxima calidad de visualización en las pantallas digitales como los LCD o proyectores. Evita la distorsión y el ruido al corresponder directamente un píxel a representar con uno del monitor en la resolución nativa del mismo.
S-Video: incluido para dar soporte a televisores, reproductores de DVD, vídeos, y videoconsolas.
Otras no tan extendidas en 2007 son:
S-Video implementado sobre todo en tarjetas con sintonizador TV y/o chips con soporte de video NTSC/PAL
Vídeo Compuesto: analógico de muy baja resolución mediante conector RCA.
Vídeo por componentes: utilizado también para proyectores; de calidad comparable a la de SVGA, dispone de tres clavijas (Y, Cb y Cr).
HDMI: tecnología de audio y vídeo digital cifrado sin compresión en un mismo cable.
Display Port: Puerto para Tarjetas gráficas creado por VESA y rival del HDMI, no transfiere sonido ni tampoco DRM. La principal ventaja es que posé unas pestañitas que impiden que el cable se desconecte con facilidad como en el caso del HDMI
En orden cronológico, los sistemas de conexión entre la tarjeta gráfica y la placa base han sido, principalmente:
Slot MSX : bus de 8 bits usado en los equipos MSX
ISA: arquitectura de bus de 16 bits a 8 MHz, dominante durante los años 1980; fue creada en 1981 para los IBM PC.
Zorro II usado en los Commodore Amiga 2000 y Commodore Amiga 1500.
Zorro III usado en los Commodore Amiga 3000 y Commodore Amiga 4000
NuBus usado en los Apple Macintosh
Processor Direct Slot usado en los Apple Macintosh
MCA: intento de sustitución en 1987 de ISA por IBM. Disponía de 32 bits y una velocidad de 10 MHz, pero era incompatible con los anteriores.
EISA: respuesta en 1988 de la competencia de IBM; de 32 bits, 8.33 MHz y compatible con las placas anteriores.
VESA: extensión de ISA que solucionaba la restricción de los 16 bits, duplicando el tamaño de bus y con una velocidad de 33 MHz.
PCI: bus que desplazó a los anteriores a partir de 1993; con un tamaño de 32 bits y una velocidad de 33 MHz, permitía una configuración dinámica de los dispositivos conectados sin necesidad de ajustar manualmente los jumpers. PCI-X fue una versión que aumentó el tamaño del bus hasta 64 bits y aumentó su velocidad hasta los 133 MHz.
AGP: bus dedicado, de 32 bits como PCI; en 1997 la versión inicial incrementaba la velocidad hasta los 66 MHz.
PCIe: interfaz serie que desde 2004 empezó a competir contra AGP, llegando a doblar en 2006 el ancho de banda de aquel. No debe confundirse con PCI-X, versión de PCI.
En la tabla adjunta10 11 se muestran las características más relevantes de algunos de dichos interfaces.
Dispositivos refrigerantes
Conjunto de disipador y ventilador.
Debido a las cargas de trabajo a las que son sometidas, las tarjetas gráficas alcanzan temperaturas muy altas. Si no es tenido en cuenta, el calor generado puede hacer fallar, bloquear o incluso averiar el dispositivo. Para evitarlo, se incorporan dispositivos refrigerantes que eliminen el calor excesivo de la tarjeta. Se distinguen dos tipos:
Disipador: dispositivo pasivo (sin partes móviles y, por tanto, silencioso); compuesto de material conductor del calor, extrae este de la tarjeta. Su eficiencia va en función de la estructura y la superficie total, por lo que son bastante voluminosos.
Ventilador: dispositivo activo (con partes móviles); aleja el calor emanado de la tarjeta al mover el aire cercano. Es menos eficiente que un disipador y produce ruido al tener partes móviles.
Aunque diferentes, ambos tipos de dispositivo son compatibles entre sí y suelen ser montados juntos en las tarjetas gráficas; un disipador sobre la GPU (el componente que más calor genera en la tarjeta) extrae el calor, y un ventilador sobre él aleja el aire caliente del conjunto.
Alimentación
Hasta ahora la alimentación eléctrica de las tarjetas gráficas no había supuesto un gran problema, sin embargo, la tendencia actual de las nuevas tarjetas es consumir cada vez más energía. Aunque las fuentes de alimentación son cada día más potentes, el cuello de botella se encuentra en el puerto PCIe que sólo es capaz de aportar una potencia de 150 W.12 Por este motivo, las tarjetas gráficas con un consumo superior al que puede suministrar PCIe incluyen un conector (PCIe power connector)13 que permite una conexión directa entre la fuente de alimentación y la tarjeta, sin tener que pasar por la placa base, y, por tanto, por el puerto PCIe.
Aun así, se pronostica que no dentro de mucho tiempo las tarjetas gráficas podrían necesitar una fuente de alimentación propia, convirtiéndose dicho conjunto en dispositivos externos.14
Tipos de tarjetas gráficas
Tarjeta MDA
"Monochrome Display Adapter" o Adaptador monocromo. Fue lanzada por IBM como una memoria de 4 KB de forma exclusiva para monitores TTL (que representaban los clásicos caracteres en ámbar o verde). No disponía de gráficos y su única resolución era la presentada en modo texto (80x25) en caracteres de 14x9 puntos, sin ninguna posibilidad de configuración.
Tarjeta CGA
"Color Graphics Array" o "Color graphics adapter" según el texto al que se recurra. Aparece en el año 1981 también de la mano de IBM y fue muy extendida. Permitía matrices de caracteres de 8x8 puntos en pantallas de 25 filas y 80 columnas
FUENTE:WIKIPEDIA
ESPERO QUE LES GUSTE ME LLEVO TODA LA TARDE JEJE