275. 使用 NES 调色板的图案表
使用默认的 NES RGB 调色板渲染图案表帧缓冲。
第 275 / 356 · tests/chapter_05_rendering_pipeline/test_275_pattern_table_with_nes_palette.py
待更新的文件
emulator/rendering/pattern_table_renderer.py为什么需要这一步
通用的图案表渲染器已经支持自定义调色板
pattern_table_to_framebuffer(pattern_table_bytes, palette)这在测试和调试调色板中很有用。现在我们有了默认的 NES RGB 调色板近似值,于是我们添加一个便捷的辅助函数:
pattern_table_to_nes_framebuffer(pattern_table_bytes)这个辅助函数让默认调色板路径更加明确,同时不移除对自定义调色板的支持。
它应该做什么
pattern_table_to_nes_framebuffer(pattern_table_bytes)
-> pattern_table_to_framebuffer(pattern_table_bytes, NES_PALETTE_RGB)建议的实现示例
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)为什么不把 NES_PALETTE_RGB 设为默认参数?
这样做也是可行的
def pattern_table_to_framebuffer(pattern_table_bytes, palette=NES_PALETTE_RGB):
...但对于教程来说,用单独的辅助函数会更清晰
pattern_table_to_framebuffer(..., palette)
custom palette path
pattern_table_to_nes_framebuffer(...)
default NES palette path注意:本测试只使用合成的 CHR 字节,不要在本测试中使用商业 ROM 的 CHR 数据。
本步骤不涉及
- pygame 显示
- 写入图像文件
- 名称表/背景渲染
- PPU 调色板 RAM 查找
- PPUMASK 强调颜色
- 精灵
运行本课
uv run pytest tests/chapter_05_rendering_pipeline/test_275_pattern_table_with_nes_palette.py -v