271. Acceso a píxeles del framebuffer
Añadir ayudantes sencillos de acceso a píxeles del framebuffer.
Lección 271 de 356 · tests/chapter_05_rendering_pipeline/test_271_framebuffer_pixel_access.py
Archivo a actualizar
emulator/rendering/framebuffer.pyPor qué existe este paso
El framebuffer ahora almacena una lista plana de píxeles RGB. El código de renderizado no debería tener que repetir la fórmula de índice plano en todas partes, así que Framebuffer expone dos pequeños ayudantes:
get_pixel(x, y) -> RGBColor
set_pixel(x, y, color) -> None¿Qué es la indexación plana de píxeles? La indexación plana almacena coordenadas de imagen 2D en una lista 1D.
Fórmula
index = y * width + xEjemplo mínimo con width = 4:
(x=0, y=0) -> index 0
(x=1, y=0) -> index 1
(x=0, y=1) -> index 4
(x=2, y=1) -> index 6Ejemplo de implementación sugerida
class Framebuffer:
...
def get_pixel(self, x: int, y: int) -> RGBColor:
return self.pixels[y * self.width + x]
def set_pixel(self, x: int, y: int, color: RGBColor) -> None:
self.pixels[y * self.width + x] = colorSimplificación importante
Este paso del tutorial mantiene intencionadamente los ayudantes pequeños. En el futuro podemos añadir validación para:
x/y out of bounds
negative coordinates
RGB tuple length
RGB component byte range 0-255Por ahora, los tests usan únicamente coordenadas válidas y colores RGB válidos.
Fuera de alcance
- validación de coordenadas
- validación de RGB
- búsqueda en paleta
- renderizado de tablas de patrones
- renderizado de nametables
- pantalla de pygame
Ejecutar esta lección
uv run pytest tests/chapter_05_rendering_pipeline/test_271_framebuffer_pixel_access.py -v