275. Tabla de patrones con la paleta de la NES
Renderizar un framebuffer de tabla de patrones usando la paleta RGB por defecto de la NES.
Lección 275 de 356 · tests/chapter_05_rendering_pipeline/test_275_pattern_table_with_nes_palette.py
Archivo a actualizar
emulator/rendering/pattern_table_renderer.pyPor qué existe este paso
El renderizador genérico de tabla de patrones ya admite paletas personalizadas
pattern_table_to_framebuffer(pattern_table_bytes, palette)Eso es útil para tests y paletas de depuración. Ahora que tenemos una aproximación de paleta RGB por defecto de la NES, añadimos un ayudante de conveniencia:
pattern_table_to_nes_framebuffer(pattern_table_bytes)Este ayudante mantiene explícita la ruta de paleta por defecto sin eliminar el soporte de paletas personalizadas.
Qué debería hacer
pattern_table_to_nes_framebuffer(pattern_table_bytes)
-> pattern_table_to_framebuffer(pattern_table_bytes, NES_PALETTE_RGB)Ejemplo de implementación sugerida
from emulator.rendering.nes_palette import NES_PALETTE_RGB
def pattern_table_to_nes_framebuffer(
pattern_table_bytes: bytes,
) -> Framebuffer:
return pattern_table_to_framebuffer(pattern_table_bytes, NES_PALETTE_RGB)¿Por qué no hacer que NES_PALETTE_RGB sea el argumento por defecto?
Esto funcionaría
def pattern_table_to_framebuffer(pattern_table_bytes, palette=NES_PALETTE_RGB):
...Pero un ayudante separado es más claro para el tutorial
pattern_table_to_framebuffer(..., palette)
custom palette path
pattern_table_to_nes_framebuffer(...)
default NES palette pathNota: Este test 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 nametable/fondo
- búsqueda en la RAM de paletas de la PPU
- colores de énfasis de PPUMASK
- sprites
Ejecutar esta lección
uv run pytest tests/chapter_05_rendering_pipeline/test_275_pattern_table_with_nes_palette.py -v