¿Cómo dibuja una línea en la pantalla un programa de gráficos por computadora? Del código de alto nivel al nivel de la tarjeta gráfica, ¿qué sucede?

Oh chico, la respuesta a esta pregunta es grande. En pocas palabras, se pregunta cómo funcionan los controladores.
Aquí voy a discutir sobre los controladores de código abierto “MESA” para Linux. (Sí, también hay otros controladores para BSD).

Te pondré la respuesta simple.

Como ha mencionado OpenGL en la pregunta, echemos un vistazo a cómo se traducen las funciones de OpenGL a código máquina de bajo nivel.

Sabemos que hay dos procesos en la ejecución de un programa,
1. Compilando la fuente
2. Ejecución del programa.

1. Compilación de la fuente: Los métodos OpenGL llamados en la fuente se traducen a la fuente TGSI (documentación de TGSI – Gallium v0.4) dependiendo de la función llamada. Por ejemplo, una función de dibujo de línea se traduce en código TGSI y se agrega al archivo compilado.

2. Ejecutando el ejecutable: el controlador traduce el código TGSI al código específico de la GPU. El controlador gestiona el cambio de contexto, las llamadas de CPU a GPU, copia datos de un lado a otro, y todo. Hay diferentes backends para cada GPU pero la misma interfaz de mesa para todas las GPU.

Ejecución: cuando se ejecuta el ejecutable, la CPU ejecuta las funciones del host. Cuando toca las funciones gráficas, le da el control al controlador de la GPU. El controlador traduce el código TGSI al código específico de la GPU, crea contextos, cambia contextos, envía los 1 y 0 a través de PCI-e a la GPU, ejecuta los datos y el control se envía de vuelta a la CPU. Si necesita mostrarse directamente desde la GPU, se actualiza el framebuffer y se le da el control a la GPU.

Nota: Las funciones de OpenGL no están codificadas en la GPU. Son solo API. Los compiladores y controladores los traducen al código de GPU apropiado y los ejecutan. A continuación se muestra una figura de la GPU de la familia AMD R600 con arquitectura VLIW.

Sé que los detalles son menores y la información es pequeña. Bueno, pediste “Cómo escribir un controlador de tarjeta gráfica”. Alrededor de 100 personas trabajan en esto todo el día. Entonces, la información es demasiado para escribir todo aquí. Si tiene alguna pregunta específica, deje un comentario a continuación.

A alto nivel, así es como funciona la canalización de gráficos

1) Se describe la geometría del modelo 3D.
2) La geometría se divide en triángulos. Las transformaciones que se aplican al modelo (es decir, los triángulos del modelo) se denominan transformaciones del modelo.
3) Tenemos una cámara virtual correspondiente al ojo. La transformación aplicada en la cámara se llama Ver transformaciones
4) Para dar un efecto 3D, se aplica una proyección en perspectiva que convierte el modelo 3D en espacio 2D. Estos se llaman transformaciones de proyección
5) Las transformaciones de proyección de vista de modelo transforman los objetos y los colocan en el espacio de la pantalla. Estos están descritos por matrices MVP
6) Rasterice los triángulos para obtener los píxeles (se llaman fragmentos hasta llegar a la etapa final)
7) Los fragmentos están sombreados. Puede ser tan simple como usar colores interpolados o complejos (aplique iluminación y texturas para obtener realismo)
8) Los fragmentos se combinan (mezclan) para obtener un solo píxel. La combinación puede ser cualquier operación arbitraria como la fusión o tan simple como mostrar el píxel más cercano al observador. Esta fase de mezcla combina los fragmentos generados por (posiblemente varias primitivas que se superponen y calculan el color final

Obtenga más información sobre la canalización de gráficos de OpenGL Basics

Ahora debe darse cuenta a un nivel muy alto, hacemos lo siguiente
1. Transformación : transforma la geometría en espacio de pantalla
2. Rasterización : rasteriza los píxeles (o fragmentos)
3. Aplicando Iluminación y Texturizado
4. Mezcle los fragmentos a un solo color.
5. Los sombreadores son códigos definidos por el usuario que se utilizan para personalizar la canalización.
Ampliaremos cada una de estas secciones en detalles

Transformación
Mire algunos videos introductorios, por ejemplo, este video de Samsung brinda una descripción general de las transformaciones

Familiarícese con las transformaciones que ocurren a alto nivel (estas son transformaciones de modelo, vista y proyección). También esté familiarizado con términos como Ver Frustum. Algunas matemáticas básicas ayudarán a saber lo que está sucediendo en Diary of a Graphics Programmer. Opcionalmente, si desea conocer más detalles y la programación matemática GLSL / Transformaciones de vértices

Ahora empieza a leer artículos
Una introducción a OpenGL moderno. Tabla de contenido
Página sobre Ntu
Página sobre Ntu
OpenGL
La tubería gráfica básica

RASTERIZACIÓN
La rasterización es simplemente el proceso de encontrar qué píxeles se encuentran dentro del triángulo. Podemos decir que solo estamos coloreando los triángulos. Si los atributos de color en los vértices son los mismos, podemos colorear uniformemente la región. De lo contrario, los atributos en los vértices deben ser interpolados. Vea una demostración del triángulo interpolado en openGL

ILUMINACIÓN
Recuerde que el rasterizador solo interpola el color. Para la mayoría de las aplicaciones esto es suficiente, pero en presencia de luz necesitamos modelos más sofisticados. El efecto de la luz se captura utilizando ecuaciones de sombreado. La iluminación más simple es el sombreado plano. Hay modelos matemáticos avanzados como Phong / Gourard.

Obtenga una descripción general de la iluminación de
opcionalmente si desea aprender Iluminación en detalle, vea el video de Barbara Hecker

Cubre diferentes modelos de iluminación.

Mapeo de texturasAprenda un mapeo básico de texturas aquí
Página en Csusb
Opcionalmente, también puede sumergirse en el mapeo de texturas avanzado:
Mapeo avanzado de texturas

Mezcla La fase de mezcla combina los fragmentos generados por (posiblemente varias primitivas que se superponen y calculan el color final
Aprenda sobre los diferentes modos de fusión aquí
Efectos de sombreado: modos de fusión

También necesitamos eliminar partes de esas superficies que están parcialmente ocultas por otras superficies. Estas se llaman superficies ocultas. Remoción de superficie oculta. Esto se hace usando el buffer de profundidad

SHADERS
Lea cómo se reemplaza la funcionalidad fija de la tubería mediante sombreadores
Tutorial GLSL
Ejemplos de sombreadores

LIBROS: El libro de Peter Shirely me pareció muy bueno para aprender los conceptos de los gráficos por computadora. La mayoría de los libros se sumergen en los detalles sin dar la motivación. Shirley da buenos antecedentes de los conceptos.

Fundamentos de gráficos por computadora: Peter Shirley, Michael Ashikhmin, Steve Marschner: 9781568814698: Amazon.com: Libros
VIDEOS ver cursos como Gráficos en línea (Berkeley CS 184) Videos o NPTEL

Ver algunos videos en Computer Graphics Series por el Dr. Sukhendu das

y también pocos videos relacionados en la lista de reproducción

Suscríbete al canal de YouTube Gráficos por computadora. La mayoría de los videos son generales y no informativos como conferencias. Pero son motivadores. Este video también es muy general, pero puede interesarte si te gusta la programación de juegos.

POBLACIÓN
Mira demostraciones de cómo funcionan las cosas. Hay muchas demostraciones que le permiten cambiar, por ejemplo, las matrices de proyección de la vista del modelo, los parámetros de iluminación. Una de las mejores demos es de Nate Robbins. Obtenga las demostraciones OpenGL de Nate Robbin y cambie los parámetros y vea cómo afecta el renderizado.

Tener programación OpenGL como referencia. Parece que hay cientos de llamadas OpenGL. Es fácil de aprender si se desglosa en categorías. Esta página los ha resumido muy bien. Guía de referencia rápida de OpenGL

Idealmente, debe instalar algún marco en su sistema local, pero si desea una demostración web rápida, use

Demos web
Las lecciones | Learning WebGL
WebGL Shader Lab – Estructura codificada
Lección 0: Introducción a WebGL u otros marcos
Editor en línea WebGL GLSL Shader

PRÁCTICA OpenGL USANDO GLUT / FreeGLUT

OpenGL paso a paso tiene algunos ejercicios. Prueba algunos de ellos. Instalar GLUT
La página en Ntu ayuda a instalar el exceso. Pruebe algunos controles de teclado y mouse
Código fuente de manejo de eventos del mouse en OpenGL. Pruebe alguna animación, por ejemplo, Bola en movimiento. Aplicar textura usando
Programación OpenGL / Intermedio / Texturas

Obtenga el código OpenGL ejecutándose con Shaders. Mire esto como referencia. Página en Csusb. Escribe tu propio sombreador de fragmentos para dibujar un círculo
Fragment Shader Introducción. Escriba su propio sombreador para iluminación usando
WebGL Lección 13 – iluminación por fragmento y múltiples programas

PRÁCTICA OpenGLESOpenGLES es un subconjunto de OpenGL. Desprecia algunas funciones como glBegin / glEnd que se usa para describir la geometría. Obtenga muestras de OpenGLES trabajando en Android

Lección uno de Android: Primeros pasos.

En OpenGLES, la geometría se especifica usando Vertex Buffers. Aprenda más sobre esto aquí Capítulo 5. Objetos en profundidad. Pruebe cosas avanzadas en Android también, por ejemplo, Android Lección cuatro: Introducción a la textura básica

usuarios de iPhone
OpenGL ES desde cero, Parte 2: Una mirada al dibujo simple
Todo sobre OpenGL ES 2.x – (parte 2/3)
Guía de programación de OpenGL ES para iOS

RECURSOS ADICIONALES Aunque a OpenGL no le interesan las herramientas de modelado, es bueno entender la descripción general de cómo se hace. Solo eche un vistazo rápido a Page en Cssb

Puede sumergirse en las matemáticas si está interesado Página en Matemáticas esenciales. Las coordenadas homogéneas se utilizan para representar vértices

Si desea un conocimiento profundo, lea Un viaje a través de Graphics Pipeline 2011, parte 1 y otras partes

Y vea las conferencias en profundidad de John Owens (UCDavis)
(este está en la descripción general de Pipeline, pero también en Rasterización, etc.)

puedes leer mi ráster renderer.sdlwlxf1 / tinyEngine

luego escribe tu propio renderizador.