no tengo idea general, pero me gustaría añadir otro elemento a la lista - Representación de fuentes y cálculos. Encontrar glifos vectoriales en una fuente y convertirlos en representaciones de mapa de bits con anti-aliasing no es tarea fácil. Y a menudo tiene que hacerse dos veces: primero para calcular el ancho/alto del texto para el posicionamiento, y luego dibujar el texto en las coordenadas correctas.
Además, la mayoría código de dibujo actual se basa en mecanismos de recorte para actualizar sólo una parte de la interfaz gráfica de usuario. Por lo tanto, si solo se necesita volver a dibujar una parte, el código en realidad vuelve a dibujar toda la ventana detrás de las escenas, y luego solo toma la parte necesaria para actualizarse realmente.
Agregado:
En los comentarios que encontré esto:
también estoy muy interesado en esto. No puede ser que la GUI se represente usando solo la CPU porque si no tiene los controladores adecuados para su tarjeta gfx, los gráficos de escritorio rinden increíblemente lento. Si tienes gfx-drivers, sin embargo, desktop-gfx funciona un poco rápido, pero nunca tan rápido como una aplicación de Directx/OpenGL.
Aquí está el acuerdo tal como lo entiendo: todas las tarjetas gráficas que hay hoy en día admiten una interfaz genérica para dibujar. No estoy seguro si se llama "VESA", "SVGA", o si solo se trata de nombres antiguos del pasado.De todos modos, esta interfaz implica hacer todo a través de interrupciones. Por cada píxel hay una llamada de interrupción. O algo así. Sin embargo, el controlador VGA adecuado es capaz de aprovechar DMA y otras mejoras que hacen que todo el proceso sea mucho menos intenso.
Agregado 2: Ah, y para OpenGL/DirectX: esa es otra característica de las tarjetas gráficas de hoy en día. Están optimizados para operaciones 3D en modo exclusivo. Es por eso que la velocidad. La GUI normal solo utiliza procedimientos básicos de dibujo en 2D. Por lo tanto, envía los contenidos de la pantalla completa cada vez que quiere una actualización. Sin embargo, las aplicaciones 3D envían un montón de texturas y definiciones de triángulos a la VRAM (video-RAM) y luego solo las reutilizan para dibujar. Simplemente dicen algo como "toma el triángulo establecido # 38 con el conjunto de textura # 25 y dibuja". Todas estas cosas están almacenadas en caché en la VRAM, así que esto es mucho más rápido.
No estoy seguro, pero sospecho que las modernas GUI aceleradas en 3D (Vista Aero, compiz en Linux, etc.) también podrían aprovechar esto. Podrían enviar mapas de bits comunes al VGA por adelantado y luego simplemente reutilizarlos directamente desde la VRAM. Sin embargo, cualquier superficie dibujada por la aplicación debería enviarse directamente cada vez para recibir actualizaciones.
Agregado 3: Más ideas. :) Las GUI modernas para Windows, Linux, etc. están orientadas a widgets (orientadas al control para altavoces de Windows). El problema con esto es que cada widget tiene su propio código de dibujo y superficie de dibujo asociada (más o menos). Cuando la ventana necesita volverse a dibujar, llama al código de dibujo para todos sus widgets secundarios, que a su vez llaman al código de dibujo para sus widgets hijos, etc. Cada widget vuelve a dibujar toda su superficie, aunque parte de ella está oscurecida. por otros widgets. Con las técnicas de recorte mencionadas anteriormente, parte de esta información extraída se descarta inmediatamente para reducir el parpadeo y otros artefactos. Pero aún así hay un montón de código de dibujo manual que incluye blitting de mapas de bits, estiramientos, sesgos, líneas de dibujo, texto, llenado de inundaciones, etc. Y todo esto se traduce en una serie de llamadas de putpixel que se filtran a través de filtros de recorte/máscaras y otras cosas. Ah, sí, y la mezcla alfa también se ha hecho popular hoy en día para efectos agradables, lo que significa aún más trabajo. Entonces ... sí, se podría decir que esto se debe a mucha abstracción e indirección. Pero ... ¿podrías hacerlo mejor? No lo creo. Solo las técnicas 3D pueden ser útiles, ya que aprovechan la GPU para realizar cálculos alfa y clipping.
También estoy muy interesado en esto. No puede ser que la interfaz gráfica de usuario se represente solo con la CPU porque si no tiene los controladores adecuados para su tarjeta gfx, los gráficos de escritorio se vuelven _incredibly_ lentos. Si tienes gfx-drivers, sin embargo, desktop-gfx funciona un poco rápido, pero nunca tan rápido como una aplicación de Directx/OpenGL. –
Los únicos algoritmos que probablemente sean lentos son los algoritmos de representación de software, pero las GUI se están alejando de ese –