Skip to content

Single frame of garbage data when starting Gfx with a vram-backed framebuffer #230

@TapGhoul

Description

@TapGhoul

As per https://discord.com/channels/1410429555188961342/1410435424249450610/1410993383987744838

The general issue here is that when creating a framebuffer via https://github.com/devkitPro/libctru/blob/e09a49a08fa469bc08fb62e9d29bfe6407c0232a/libctru/source/gfx.c#L125-L158 we immediately present the framebuffer and turn of GSGPU's "force black" setting. When doing this with a CPU-side buffer, this is fine, as it's initialized to all 0's, but when it's a GPU-side buffer it can have anything in it. And until you present again, this remains on screen. As a result, you are forced to display a single frame of garbage on both displays.

A few proposed solutions:

  • Call GSPGPU_SetLcdForceBlack(0x1) right after init, blanking out the display again, so we can clear it properly and call present again ourselves, burning a single frame of startup time and performing redundant startup work.
  • Submit a patch to libctru to fix it.
  • Implement the startup routine ourselves, with a fork of libctru exposing the required statics.
  • Compile libctru within ctru-sys, allowing us to apply patches prior to a build.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions