Commit Graph

83 Commits

Author SHA1 Message Date
Arisotura 35cc79787d update copyright headers 2022-01-09 02:15:50 +01:00
Arisotura 19ddaee13b finally decouple Config from the core. baahhahahahah 2021-11-18 01:17:51 +01:00
RSDuck 883fceb6ce use std::swap 🔃 2021-08-21 01:54:45 +02:00
RSDuck f900792dc0 addition to last commit 2021-08-04 14:35:54 +02:00
RSDuck 9181ab19c7 GPU3D soft: prevent out of bounds read 2021-05-24 19:41:24 +02:00
RSDuck 509107fb59 set instead of or stencil buffer for left edges 2021-05-08 00:12:48 +02:00
RSDuck 436b3c4c1d update copyright year and add missing GPL headers 2021-03-12 20:07:40 +01:00
RSDuck bc63531e00 avoid leaking threads in NDSCart_SRAMManager
also atomics
2021-03-11 16:54:43 +01:00
RSDuck 295d60e4cb try to fix build when the compiler is stricter 2021-02-11 19:11:18 +01:00
RSDuck f05bc50d40 use std::function in Thread_Create so we can revert back to using it 2021-02-11 16:00:36 +01:00
Wunk a7029aebae
Allow for a more modular renderer backends (#990)
* Draft GPU3D renderer modularization

* Update sources C++ standard to C++17

The top-level `CMakeLists.txt` is already using the C++17 standard.

* Move GLCompositor into class type

Some other misc fixes to push towards better modularity

* Make renderer-implementation types move-only

These types are going to be holding onto handles
of GPU-side resources and shouldn't ever be copied around.

* Fix OSX: Remove 'register' storage class specifier

`register` has been removed in C++17...
But this keyword hasn't done anything in years anyways.

OSX builds consider this "warning" an error and it
stops the whole build.

* Add RestartFrame to Renderer3D interface

* Move Accelerated property to Renderer3D interface

There are points in the code base where we do:
`renderer != 0` to know if we are feeding
an openGL renderer. Rather than that we can instead just have this be
a property of the renderer itself.
With this pattern a renderer can just say how it wants its data to come
in rather than have everyone know that they're talking to an OpenGL
renderer.

* Remove Accelerated flag from GPU

* Move 2D_Soft interface in separate header

Also make the current 2D engine an "owned" unique_ptr.

* Update alignment attribute to standard alignas

Uses standardized `alignas` rather than compiler-specific
attributes.

https://en.cppreference.com/w/cpp/language/alignas

* Fix Clang: alignas specifier

Alignment must be specified before the array to align the entire array.

https://en.cppreference.com/w/cpp/language/alignas

* Converted Renderer3D Accelerated to variable

This flag is checked a lot during scanline rasterization. So rather
than having an expensive vtable-lookup call during mainline rendering
code, it is now a public constant bool type that is written to only once
during Renderer3D initialization.
2021-02-09 23:38:51 +01:00
RSDuck b78bc4cb66 fixes to the threadedness of the sw rasteriser
also fix #639 and fix #880
2021-01-26 16:42:27 +01:00
RSDuck 7d448d911d use C++ style structs everywhere 2021-01-02 11:38:06 +01:00
RSDuck 6e8bac3909 Merge vram dirty tracking
Squashed commit of the following:

commit b463a05d4b909372f0cd1ad91caa0c77a25e5901
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Mon Nov 30 01:55:35 2020 +0100

    minor fix

commit ce73cebbdf5da243d7ebade82d8799ded9cd6b28
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Mon Nov 30 00:43:08 2020 +0100

    fix dirty flags of BG/OBJ mappings not being reset

commit fc5d73a6178e3adc444398bdd23de8314b5ca8f8
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Mon Nov 30 00:11:13 2020 +0100

    use flat vram for gpu2d everywhere

commit 34ee9fe2bf04fcfa2a5a1c8d78d70007e606f1a2
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Sat Nov 28 19:10:34 2020 +0100

    mark VRAM dirty for display capture

commit e8778fa2f429c6df0eece19d6a5ee83ae23a0cf4
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Sat Nov 28 18:59:31 2020 +0100

    use flat VRAM for textures and texpals
    also skip rendering if nothing changed and a bunch of fixes

commit 53f2041e2e1a28b35702a2ed51de885c36689f71
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Fri Nov 27 18:29:56 2020 +0100

    use vram dirty tracking for extpals
    also preparations to take this further

commit 4cdfa329e95aed26d3b21319c8fd86a04abf20f7
Author: RSDuck <rsduck@users.noreply.github.com>
Date:   Mon Nov 16 23:32:22 2020 +0100

    VRAM dirty tracking
2020-11-30 19:49:18 +01:00
RSDuck 2720df9650 make platform objects typesafer and add mutex 2020-11-09 21:52:35 +01:00
Arisotura 0804ab3c78 * rework GPU's settings interface, make it config-agnostic
* make video settings dialog functional, sorta
* fix dialogs that were resizable
2020-05-28 15:53:32 +02:00
Arisotura 83f8e11bc1 update copyright years 2020-02-14 20:18:08 +01:00
Arisotura 3c70015da7 software renderer: fix rendering of line polygons. fixes #350 2019-06-11 03:10:32 +02:00
Arisotura db396e992b welp.
progress
2019-05-21 22:28:46 +02:00
Arisotura c1746f0c60 BAHAHAHHHH
HARK HARK HARK
2019-05-16 20:58:07 +02:00
Arisotura c81bcccadc BAHAHAHAHAHAHAHAA 2019-05-16 16:27:45 +02:00
Arisotura 0a464c504d de-hardcode the GL renderer.
init framebuffer to black.
fix bugs.
2019-05-12 16:32:53 +02:00
Arisotura fb4f972cad hires hax. somewhat functional 2019-05-08 01:58:34 +02:00
Arisotura f8751bd1fb first attempt at things
(also fix softrenderer reset)
2019-04-01 02:51:31 +02:00
Arisotura b0efde8bf7 also, update copyright name 2019-01-22 15:58:29 +01:00
StapleButter f6e6fa05ea some work on extreme/degenerate shit in GPU
* clip against Z then Y then X. apparently, fixes #310. I had also observed hints that the hardware does it this way.
* truncate W to 24 bits before viewport transform.
* mark any polygons that have a W=0 at that point as degenerate. do not render.
2018-12-20 01:31:31 +01:00
StapleButter dd30b417b8 implement proper support for POWCNT1.
fixes #260
2018-12-18 17:04:42 +01:00
StapleButter 68d5e3c782 3D: in Z-buffering mode, margin for 'equal' depth test mode is +-0x200, not +-0xFF
fixes #274
2018-12-13 22:46:12 +01:00
StapleButter b4165cc0a9 3D: keep the rasterizer from accidentally going out of bounds when given very flat X-major edge slopes.
this, by a fucking shitshow of butterfly effect, ends up fixing #234. technically, the rasterizer was going out of bounds, which, under certain circumstances, caused interpolation to shit itself and generate Z values that were out of range (but still ended up in the zbuffer). sometimes those values ended up negative, which caused these glitches when polygons had to be drawn over those.

about fucking time.
2018-11-04 23:21:58 +01:00
StapleButter 4075dad0a8 3D: attempt at fixing that shadow/AA interaction bug in the MKDS character select screen 2018-10-22 01:36:04 +02:00
StapleButter fea7955675 fixor copyright years. 2018-09-15 02:32:13 +02:00
StapleButter ce592a1d80 this TODO item is already done, idiot 2017-10-02 00:55:44 +02:00
StapleButter c9ac08aa5b 3D: blend translucent pixels with bottom pixels when needed.
fixes antialiasing within shadows, under translucent polygons, etc
2017-08-28 22:19:49 +02:00
StapleButter 183b8b58e0 3D: move shadow mask rendering to separate function, optimize it (it doesn't need to interpolate all vertex attributes) 2017-08-28 20:27:56 +02:00
StapleButter ee6daa0e62 fix antialiasing along Y-major edges 2017-08-28 18:48:06 +02:00
StapleButter 2e23ae54b2 3D:
* more accurate polygon edges (still not perfect. heh)
* antialiasing (doesn't always work)
2017-08-28 18:37:07 +02:00
StapleButter d656e6e7ff 3D: faster and more accurate interpolation 2017-08-17 23:34:37 +02:00
StapleButter bc1385e905 3D: revise fog calculation to match hardware (emulate precision loss and overflow with big shifts) 2017-08-16 22:20:53 +02:00
StapleButter 0df3a29374 * FPS counter displays target framerate
* fix potential hang and out-of-bounds drawing when VCount is modified during drawing
2017-07-21 10:19:56 +02:00
StapleButter 6b6389fbb4 separate polygonID attributes for opaque and translucent pixels.
rendering translucent pixels preserves opaque polygonID and edge flags for edgemarking.

fixes edgemarking malfunctions, like #80 or black dots in Pokémon games
2017-07-15 15:24:25 +02:00
StapleButter cd6ecfc21f apply the interpolation fix to Z interpolation.
more accurate conversion of Z values.

but this doesn't fix the horrendous Z-fighting in Pokémon B/W because of course it doesn't >_<
2017-07-14 04:49:29 +02:00
StapleButter 04172f47de fix potential overflow in fog density calculation 2017-07-14 00:12:35 +02:00
StapleButter a1401e724c * actually fix linear interpolation when y0>y1
* change the backfacing attribute bit, so that it doesn't mess with edgemarking
2017-07-13 23:09:42 +02:00
StapleButter 800540b710 attempt to fix interpolation when y0>y1 2017-07-10 13:31:05 +02:00
StapleButter 3aa83ae641 3D:
* undo 'winding sorting' hypothesis
* special depth test rules: 'less than' function becomes 'less or equal' when rendering front-facing polygon pixels against back-facing opaque pixels
2017-07-06 18:38:13 +02:00
StapleButter d5376b4184 3D: Y-sorting 2017-07-05 18:38:10 +02:00
StapleButter 01404ac6c3 3D: move opaque/translucent sorting to GPU3D.cpp 2017-07-05 18:11:00 +02:00
StapleButter 1acf355d99 3D: change viewport handling to match hardware. finally fixes #18 2017-07-04 19:11:43 +02:00
StapleButter da10f9b3f6 fix rendering for crapoed 'butterfly' polygons 2017-06-28 21:19:44 +02:00
StapleButter 5f6e8cc30b fix toon highlight mode. GBAtek is wrong. 2017-06-28 09:19:38 +02:00