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.

Comportamiento requerido

Console.render_framebuffer()
    -> render background framebuffer
    -> call ppu_background_to_opaque_mask(self.ppu)
    -> build sprite palettes
    -> select sprite pattern table with PPUCTRL bit 3
    -> call composite_background_and_sprites(..., background_opaque_mask=mask)

Fragmento de implementación de ejemplo

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,
)


def render_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