¿Cuál es la forma correcta de almacenar datos en un buffer de cuadros?

1

Estoy tratando de planear un proyecto de procesador de gráficos que solo generará líneas. Utilizará el algoritmo de línea de bresenhmam. Después de leer el algoritmo, tiene sentido cómo funciona el cálculo de las ubicaciones de píxeles que forman una línea. Lo que no está claro es cómo se emitirá esto a una pantalla. Tal vez, es probable que los datos se almacenen en una memoria externa, pero la forma obvia de hacerlo parece altamente ineficiente.

Supongamos que tengo 10 líneas. Calculo los valores de píxel que forman cada una de estas líneas. ¿Almaceno estos píxeles en algún FIFO interno para "enviar"? Luego, otra parte del diseño lee los valores de píxeles que se "despachan", calcula qué ubicación almacenarlos en la memoria y los escribe en la memoria. Esto se debe hacer para cada línea, lo que significa que la ubicación de la memoria se puede leer y escribir varias veces para un solo cuadro si varias líneas pasan una cerca de la otra. ¿Es esto correcto? Si es así, entonces a medida que aumente el número de líneas a dibujar, será más difícil escribir el fotograma completo en la memoria al renderizar todas las líneas antes de que se lea el siguiente fotograma, ya que la frecuencia de cuadros para la visualización de video es fija.

Esto significa que no hay manera de pasar del píxel de la pantalla superior izquierda a la parte inferior derecha y descubrir si un píxel dado es parte de una línea. No puedo encontrar una explicación sencilla sobre cómo implementar el buffer de cuadros para este tipo de sistema.

    
pregunta quantum231

1 respuesta

1

Al calcular los píxeles en cada línea, calcularía los bits en el búfer de cuadros para establecer ese píxel. Esto dependería de la organización del buffer de cuadros y la cantidad de bits por píxel. Como sugiere que dibuje 10 líneas superpuestas significa que se accede a la misma dirección varias veces, y nuevamente, a medida que aumenta el número de líneas, es posible que no pueda dibujar todas las líneas antes del escaneo del marco.

Sin embargo, esto no afecta el proceso de dibujo y no es necesario que complete el proceso de renderización antes de enviar el marco a la pantalla, pero se producirá un parpadeo. De hecho, obtendrá un parpadeo y aquí es donde se usará un segundo búfer.

La imagen que tiene dibuja una forma complicada en la pantalla que debe girarse 5 grados. La pantalla envía la información desde el búfer 1. Calcula las nuevas líneas y escribe en el búfer 2 mientras continúa mostrando el búfer 1. Una vez completado, espere a que se muestre la última línea desde el búfer actual1 y cambie la lógica de la pantalla. el siguiente escaneo muestra buffer2. Todas las escrituras posteriores se guardan en Buffer 1 hasta que estén listas para volver a cambiar.

Esta es la razón por la cual en los puntos de referencia típicos de los juegos es posible que las tasas de cuadros caigan a 12 fps en escenas complicadas. No se debe a que la pantalla pase de 60 fps, sino porque el mismo marco se muestra 5 veces antes de que el nuevo marco esté listo para ser dibujado.

    
respondido por el dizzyandlofty

Lea otras preguntas en las etiquetas