dolphin/Source/Core
Michael Maltese ba6e917b49 OGL: implement Bounding Box on systems w/o SSBO
This commit should have zero performance effect if SSBOs are supported.

If they aren't (e.g. on all Macs), this commit alters FramebufferManager
to attach a new stencil buffer and VertexManager to draw to it when
bounding box is active. `BBoxRead` gets the pixel data from the buffer
and dumbly loops through it to find the bounding box.

This patch can run Paper Mario: The Thousand-Year Door at almost full
speed (50–60 FPS) without Dual-Core enabled for all common bounding
box-using actions I tested (going through pipes, Plane Mode, Paper
Mode, Prof. Frankly's gate, combat, walking around the overworld, etc.)
on my computer (macOS 10.12.3, 2.8 GHz Intel Core i7, 16 GB 1600 MHz
DDR3, and Intel Iris 1536 MB).

A few more demanding scenes (e.g. the self-building bridge on the way
to Petalburg) slow to ~15% of their speed without this patch (though
they don't run quite at full speed even on master). The slowdown is
caused almost solely by `glReadPixels` in `OGL::BoundingBox::Get`.

Other implementation ideas:

- Use a stencil buffer that's separate from the depth buffer. This would
  require ARB_texture_stencil8 / OpenGL 4.4, which isn't available on
  macOS.

- Use `glGetTexImage` instead of `glReadPixels`. This is ~5 FPS slower
  on my computer, presumably because it has to transfer the entire
  combined depth-stencil buffer instead of only the stencil data.
  Getting only stencil data from `glGetTexImage` requires
  ARB_texture_stencil8 / OpenGL 4.4, which (again) is not available on
  macOS.

- Don't use a PBO, and use `glReadPixels` synchronously. This has no
  visible performance effect on my computer, and is theoretically
  slower.
2017-03-15 17:41:32 -07:00
..
AudioCommon Merge pull request #4548 from stenzek/gcc-sse 2017-03-13 14:28:01 +01:00
Common Merge pull request #4548 from stenzek/gcc-sse 2017-03-13 14:28:01 +01:00
Core VideoConfig: add bSupportsFragmentStoresAndAtomics 2017-03-15 17:20:47 -07:00
DiscIO Remove Blob nullptr checks from Volume code 2017-03-13 14:13:55 +01:00
DolphinNoGUI Don't special-case nogui exe name on Apple. 2017-03-08 13:17:49 -08:00
DolphinQt2 CMakeLists: Normalize whitespace 2017-03-01 14:53:23 -05:00
DolphinWX GCMemcard: Move memcard source files to their own directory 2017-03-14 21:55:25 -04:00
InputCommon GCAdapter_Android: Fix an array bounds overrun in Read() 2017-03-06 23:05:17 -05:00
UICommon Merge pull request #5038 from vladfi1/separate-nogui 2017-03-10 10:50:08 +01:00
VideoBackends OGL: implement Bounding Box on systems w/o SSBO 2017-03-15 17:41:32 -07:00
VideoCommon VideoConfig: add bSupportsFragmentStoresAndAtomics 2017-03-15 17:20:47 -07:00
CMakeLists.txt Moved NoGUI out of DolphinWx. 2017-03-08 01:24:18 -08:00