314. Console pasa la máscara de opacidad del fondo
Conecta Console.render_framebuffer() para que pase la máscara de opacidad del fondo.
Lección 314 de 356 · tests/chapter_09_sprite_rendering/test_314_console_passes_background_opaque_mask.py
Archivo a actualizar
emulator/console.py
Por qué existe este paso
El renderizador de sprites ahora puede aplicar el bit 5 de prioridad de sprites cuando recibe un BackgroundOpaqueMask. El paso 313 añadió el ayudante a nivel de PPU:
ppu_background_to_opaque_mask(ppu)
Este paso conecta ese ayudante con la ruta de renderizado del fotograma completo.
from emulator.rendering.ppu_background_renderer import (
ppu_background_to_framebuffer,
# --- ADD THIS NEW IMPORT ---
ppu_background_to_opaque_mask,
PATTERN_TABLE_0_ADDR,
PATTERN_TABLE_1_ADDR,
)
defrender_framebuffer(self) -> Framebuffer:
background = self.render_background_framebuffer()
# --- ADD THIS NEW LINE ---
background_opaque_mask = ppu_background_to_opaque_mask(self.ppu)
...
return composite_background_and_sprites(
background=background,
oam=self.ppu.oam,
pattern_table=pattern_table,
sprite_palettes=sprite_palettes,
# --- ADD THIS NEW LINE ---
background_opaque_mask=background_opaque_mask,
)
Límite importante
Console debería orquestar ayudantes. No debería duplicar la extracción de la tabla de nombres/tabla de patrones de fondo que pertenece a ppu_background_renderer.py.
Fuera de alcance
añadir otro algoritmo de máscara de fondo
cambiar ppu_background_to_opaque_mask()
sprite 0 hit
desbordamiento de sprites
pygame
Ejecutar esta lección
uv run pytest tests/chapter_09_sprite_rendering/test_314_console_passes_background_opaque_mask.py -v