¿Cómo muestra una computadora los personajes?

Su pantalla es un dispositivo que hace exactamente lo que está pidiendo: muestra datos (una secuencia de valores de color con marcadores especiales intermitentes que codifican comandos como “¡bien, hecho con esta fila de píxeles, en el siguiente!” O “el la pantalla ahora está llena, dibuje todos los píxeles de las filas nuevamente, y son los siguientes: “. Este flujo de píxeles se envía a la pantalla de la computadora (codificado como voltajes analógicos en los cables” rojo “,” verde “y” azul ” para pantallas VGA más antiguas o como un entero digital de 24 bits para pantallas más nuevas.

Ahora, todos estos datos especifican es un gran rectángulo lleno de puntos de diferentes colores, un rectángulo por cuadro (probablemente algo así como 1080 filas de 1920 píxeles, probablemente 60 veces por segundo). ¡Son muchos píxeles! Mover estos aproximadamente 356 megabytes de píxeles de su computadora a su pantalla mantiene ocupado su chip gráfico, pero también se encarga de traducir formas geométricas abstractas en un mar de píxeles. En su nivel más bajo, el sistema de gráficos sabe cómo hacer una cosa: tomar triángulos, moverlos a una posición en la pantalla (esto puede ser muy complicado y puede incluir cambios de coordenadas de una pantalla 3D a una 2D, movimiento debido a la animación , como en los videojuegos, etc.) y conviértalos en píxeles (esto también puede ser complicado, ya que el color del triángulo puede ser un cálculo muy complejo (¡piense en efectos especiales de fantasía en los videojuegos!).

Los controladores de su sistema de gráficos tienen la tarea de presentar una abstracción útil (interfaz) al programador, lo que le permite trabajar con primitivas de alto nivel como formas, matrices, rectángulos, imágenes, etc. Los controladores también programan y comparten el sistema de gráficos. entre todos los diferentes programas que lo usan (su escritorio necesita ser dibujado, al igual que su navegador, al igual que cada cuadro de video de YouTube).

Al subir una capa, las cosas se vuelven específicas de la aplicación. La mayoría de los programas no se molestan en hablar directamente con un controlador y usan uno de los numerosos marcos gráficos que existen, que permiten a un programador manipular la imagen en la pantalla de formas cada vez más abstractas (formas complejas, curvas, objetos, sistemas de coordenadas anidados, cámaras) , iconos, etc.). Un lenguaje de muy alto nivel para especificar una imagen es HTML + CSS. Estos también se traducen a través de una multitud de capas de marcos, bibliotecas y abstracciones en formas básicas y mapas de bits.

Esta estratificación de abstracciones es, como otra respuesta mencionada, conveniente: los detalles de bajo nivel son cada vez más específicos del sistema exacto, pero las bibliotecas de alto nivel crean abstracciones que abarcan un gran espacio de usuarios. Por ejemplo, todos los fabricantes de pantallas se aseguran de que sus pantallas entiendan el mismo “idioma” (flujo de píxeles), y todos usan un cable estándar para conectarse al sistema de gráficos de una computadora. El sistema de gráficos maneja las conexiones a cualquier monitor, ya sea analógico o digital, y el hardware de una computadora es compatible con una gran variedad de sistemas de gráficos. El sistema operativo instalado en su computadora sabe cómo comunicarse con un vasto y diverso espacio de hardware informático (a través de programas específicos del dispositivo llamados “controladores”, que exponen una interfaz estándar al hardware para el que están escritos). Los marcos buscan ocultar diferencias entre diferentes sistemas operativos y diferentes detalles de implementación, exponiendo una vista altamente simplificada y productiva para usted, el usuario.

Ninguna de las transformaciones mencionadas es tan complicada por sí sola, pero traducir cosas de un diagrama de Matlab a píxeles en la pantalla es una cadena de software y hardware muy larga y trabajadora.

En los “viejos tiempos”, esto era bastante simple. Para usar el ejemplo del una vez popular TRS-80 de Radio Shack, había 1k de memoria dedicada a la pantalla. Un circuito separado era responsable de leer el byte en una ubicación particular (el carácter ASCII para mostrar), y usar ese byte para leer los bits correspondientes de una ROM del generador de caracteres que tenía las formas de todas las letras, y determinaría si para mostrar un punto o no para los próximos píxeles. Luego dejaría unos pocos píxeles de espacio en blanco, y leería el siguiente byte en el video ram para el siguiente personaje, y continuaría hasta el final de la línea.

También había un poco de circuito para asegurarse de que el programa del usuario no intentara acceder a la RAM de video al mismo tiempo que el generador de caracteres, y para mantenerlo aislado del bus del sistema principal durante ese tiempo también, pero todo El proceso fue bastante simple y la CPU principal ni siquiera estuvo realmente involucrada en el proceso de visualización.

Con los sistemas operativos GUI de hoy es MUCHO más complicado. Hay rutinas de bajo nivel responsables de interpretar los archivos de fuentes para determinar cómo se debe dibujar un carácter dado en un búfer de texto, y en qué tamaño, ya sea en negrita o cursiva, etc. Luego tiene que decidir cómo optimizar el espaciado en relación con los caracteres a cada lado, ah, y luego también está la optimización de subpíxeles (por ejemplo, ClearType) que ayuda a mejorar la legibilidad aún más en las pantallas LCD … Todo lo cual, en última instancia, debe convertirse en un mapa de bits de color en la memoria, que se copia en el área donde se encuentra esa ventana, y luego ese bloque de memoria puede incluso transmitirse desde la memoria del sistema a la RAM dedicada en una tarjeta gráfica 3D para dibujar como una superficie 2-D en un polígono.

Hay un montón de trabajo detrás de escena ahora solo para la representación de texto simple.

Se maneja a través del sistema operativo en su máquina. El sistema operativo tiene un software con el que probablemente esté familiarizado y que haya jurado cuando funciona mal, llamados “controladores”. Uno de esos controladores, que generalmente se encuentra en el núcleo del sistema (la parte del sistema operativo que maneja operaciones de bajo nivel, como la comunicación con el hardware), se comunica con las tarjetas de video de su máquina. Esto es cierto independientemente del sistema operativo particular que esté utilizando.

El programa que está ejecutando realiza una llamada al sistema operativo, diciéndole lo que desea mostrar en la pantalla. Luego, el sistema operativo determina dónde debe mostrarse esa información en la pantalla, en función de la posición de la ventana que controla el programa (o si está funcionando en modo de pantalla completa), qué monitor está utilizando el programa si usa múltiples monitores, qué resolución de pantalla que ha configurado, y similares. Luego envía las instrucciones de bajo nivel necesarias a la tarjeta de video, a través del controlador de video, para ordenarle que muestre lo que el programa le solicitó. Luego, la tarjeta de video envía los impulsos necesarios a la pantalla, a través del cable que ha conectado desde su tarjeta de video al monitor, para cambiar el color y el brillo de los píxeles que deben cambiar para mostrar esa imagen.

Cuando lea esta respuesta, su navegador web descargará esas instrucciones de visualización de Quora, especificando cómo se mostrará esta página. Puede ver cómo se ven esas instrucciones haciendo clic derecho en esta página y seleccionando “Ver código fuente” o el equivalente en su navegador. Luego los interpretará y los transmitirá a su sistema operativo, como se indicó anteriormente, y su sistema operativo los transmitirá a la tarjeta de video, que luego los transmitirá al monitor. Nuevamente, el conjunto de instrucciones está estandarizado. Una aplicación web diseñada correctamente no sabe ni le importa qué navegador está utilizando, solo transmite el marcado que dice “Muestre esto de esta manera”. Si estás jugando o viendo una fotografía que tomaste, las instrucciones de visualización provienen en su lugar de los programas y archivos en tu disco local, instruyendo cómo debe colorearse cada píxel para que la imagen aparezca correctamente.

Es más bien un buen truco. El programa, en casi todos los casos, no necesita saber o importar qué tarjeta de video en particular está ejecutando o cómo funciona su conjunto de instrucciones. El conductor maneja eso.