273. Tabla de patrones a framebuffer
Renderizar una cuadrícula de depuración de tabla de patrones en un framebuffer.
Lección 273 de 356 · tests/chapter_05_rendering_pipeline/test_273_pattern_table_to_framebuffer.py
Archivo a crear
emulator/rendering/pattern_table_renderer.pyPor qué existe este paso
El emulador ya tiene ayudantes CHR puros
decode_pattern_table(pattern_table_bytes)
-> 256 decoded 8x8 tiles of color indexes
build_pattern_table_debug_grid(decoded_tiles)
-> 128x128 color-index debug gridY la canalización de renderizado ahora tiene
color_index_grid_to_framebuffer(grid, palette)
-> RGB FramebufferEste paso compone esas piezas en un único ayudante puro
pattern_table bytes + RGB palette -> 128x128 Framebuffer¿Qué es un framebuffer de depuración de tabla de patrones? Una tabla de patrones contiene 256 tiles. Cada tile mide 8x8 píxeles. Para depuración, organizamos esos tiles como:
16 tiles across * 8 pixels = 128 pixels wide
16 tiles down * 8 pixels = 128 pixels highEjemplo de implementación sugerida
from emulator.ppu.chr_decoder import (
build_pattern_table_debug_grid,
decode_pattern_table,
)
from emulator.rendering.color_index_renderer import color_index_grid_to_framebuffer
from emulator.rendering.framebuffer import Framebuffer, RGBColor
def pattern_table_to_framebuffer(
pattern_table_bytes: bytes,
palette: list[RGBColor],
) -> Framebuffer:
decoded_tiles = decode_pattern_table(pattern_table_bytes)
grid = build_pattern_table_debug_grid(decoded_tiles)
return color_index_grid_to_framebuffer(grid, palette)Regla de arquitectura
Este renderizador debería componer funciones puras existentes. No dupliques aquí la lógica de decodificación CHR.
Regla importante de fixtures
Usa únicamente bytes CHR sintéticos. No uses datos CHR de una ROM comercial en este test.
Fuera de alcance
- pantalla de pygame
- escritura de archivos de imagen
- renderizado de nametables
- búsqueda en la RAM de paletas
- renderizado de sprites
Ejecutar esta lección
uv run pytest tests/chapter_05_rendering_pipeline/test_273_pattern_table_to_framebuffer.py -v