277. 使用 NES 调色板的名称表
使用默认的 NES RGB 调色板渲染名称表帧缓冲。
第 277 / 356 · tests/chapter_05_rendering_pipeline/test_277_nametable_with_nes_palette.py
待更新的文件
emulator/rendering/nametable_renderer.py为什么需要这一步
通用的名称表渲染器支持自定义调色板
nametable_to_framebuffer(nametable_bytes, pattern_table_bytes, palette)这在测试和调试调色板中很有用。现在我们有了 NES_PALETTE_RGB,于是我们添加一个使用默认调色板的辅助函数:
nametable_to_nes_framebuffer(nametable_bytes, pattern_table_bytes)这与上一个渲染步骤中的图案表辅助函数是对应的。
它应该做什么
nametable_to_nes_framebuffer(nametable_bytes, pattern_table_bytes)
-> nametable_to_framebuffer(
nametable_bytes,
pattern_table_bytes,
NES_PALETTE_RGB,
)建议的实现示例
from emulator.rendering.nes_palette import NES_PALETTE_RGB
def nametable_to_nes_framebuffer(
nametable_bytes: bytes,
pattern_table_bytes: bytes,
) -> Framebuffer:
return nametable_to_framebuffer(
nametable_bytes,
pattern_table_bytes,
NES_PALETTE_RGB,
)重要的简化
这里仍然对每个图块使用同一个共享调色板,尚未解码 64 字节的属性表,也还没有读取 $3F00-$3F1F 处的 PPU 调色板 RAM。这可以作为一个实用的调试/简单渲染器。之后的渲染器会使用属性表在不同的背景调色板之间进行选择。
重要的测试数据规则
只使用合成的名称表/CHR 字节,不要在本测试中使用商业 ROM 数据。
本步骤不涉及
- 属性表调色板选择
- PPU 调色板 RAM 查找
- 滚动
- 精灵
- OAMDMA
- pygame 显示
运行本课
uv run pytest tests/chapter_05_rendering_pipeline/test_277_nametable_with_nes_palette.py -v