bsnes/higan/gba
Tim Allen 2461293ff0 Update to v102r19 release.
byuu says:

Note: add `#undef OUT` to the top of higan/gba/ppu/ppu.hpp to compile on
Windows (ugh ...) Now to await posts about this in four more threads
again ;)

Changelog:

  - GBA: rewrote PPU from a scanline-based renderer to a pixel-based
    renderer
  - ruby: fixed video/gdi bugs

Note that there's an approximately 21% speed penalty compared to v102r18
for the pixel-based renderer.

Also, horizontal mosaic effects are not yet implemented. But they should
be prior to v103. This one is a little tricky as it currently works on
fully rendered scanlines. I need to roll the mosaic into the background
renderers, and then for sprites, well ... see below.

The trickiest part by far of this new renderer is the object (sprite)
system. Unlike every other system I emulate, the GBA supports affine
rendering of its sprites. Or in other words, rotation effects. And it
also has a very complex priority system.

Right now, I can't see any way that the GBA PPU could render pixels in
real-time like this. My belief is that there's a 240-entry buffer that
fills up the next scanline's row of pixels. Which means it probably also
runs on the last scanline of Vblank so that the first scanline has
sprite data.

However, I didn't design my object renderer like this just yet. For now,
it creates a buffer of all 240 pixels right away at the start of the
scanline. I know\!\! That's technically scanline-based. But it's only
for fetching object tiledata, and it's only temporary.

What needs to happen is I need a way to run something like a "mini libco
thread" inside of the main thread, so that the object renderer can run
in parallel with the rest of the PPU, yet not be a hideous abomination
of a state machine, yet also not be horrendously slow as a full libco
thread would be.

I'm envisioning some kind of stackless yielding coroutine. But I'll need
to think through how to design that, given the absence of coroutines
even in C++17.
2017-06-04 13:16:44 +10:00
..
apu Update to v102r17 release. 2017-03-10 21:23:29 +11:00
cartridge Update to v101r31 release. 2017-01-13 12:15:45 +11:00
cpu Update to v101r31 release. 2017-01-13 12:15:45 +11:00
interface Update to v102r13 release. 2017-03-02 07:40:55 +11:00
memory Update to v099r13 release. 2016-06-29 21:10:28 +10:00
player Update to v101r31 release. 2017-01-13 12:15:45 +11:00
ppu Update to v102r19 release. 2017-06-04 13:16:44 +10:00
system Update to v101r31 release. 2017-01-13 12:15:45 +11:00
GNUmakefile Update to v100r03 release. 2016-07-10 15:28:26 +10:00
gba.hpp Update to v102r06 release. 2017-02-11 10:56:42 +11:00