An XNA-inspired 3D graphics library with modern capabilities.
 
 
 
Go to file
TheSpydog 297f234957
continuous-integration/drone/push Build is passing Details
Miscellaneous API changes + more MSAA fixes (#26)
**Breaking API Changes**
* Removed `REFRESH_SAMPLECOUNT_16/32/64`, since hardware support for these sample counts is generally poor (and completely non-existent with MoltenVK and certain consoles).
* Removed unused `sampleCount` parameter from `Refresh_TextureCreateInfo`.
* Removed `sampleCount` parameter from `Refresh_ColorAttachmentDescription`. The existence of this parameter meant you had to sync up three different sample count values (render pass, pipeline, and color attachment description) whenever you wanted to use multisampling. However, Vulkan requires that all color attachments in a given pipeline _must_ match the pipeline's sample count anyway, so we can assume all color attachments will use the pipeline's sample count.
* Removed the `renderArea` parameter from `Refresh_BeginRenderPass()` since it didn't serve much practical purpose and slightly complicated things on the MoonWorks managed side.

**Behavior Changes**
* When creating a render pass or graphics pipeline, the requested multisample count will be converted into a sample count that's actually supported by the GPU. For example, if you request 8x MSAA on a device that only supports up to 4x MSAA, it will silently fall back to 4x MSAA.
* All color attachments are now forced to have an internal store op of `STORE`, even if `REFRESH_STORE_OP_DONTCARE` is specified. The one exception is internal multisample textures -- if `DONTCARE` is used, those textures will be discarded to save on bandwidth. (Their resolve textures will still be stored.)
* The RenderPass hashing logic was updated so that it would still work correctly with the removal of `Refresh_ColorAttachmentDescription.sampleCount`.

**Bug Fixes**
* Fixed bugs where multisampling logic wasn't kicking in for certain sample counts due to incorrect enum comparisons.

Co-authored-by: Caleb Cornett <caleb.cornett@outlook.com>
Reviewed-on: #26
Co-authored-by: TheSpydog <thespydog@noreply.example.org>
Co-committed-by: TheSpydog <thespydog@noreply.example.org>
2022-11-08 19:09:21 +00:00
Vulkan-Headers@1d99b835ec update vulkan headers 2021-02-27 15:14:48 -08:00
include Miscellaneous API changes + more MSAA fixes (#26) 2022-11-08 19:09:21 +00:00
src Miscellaneous API changes + more MSAA fixes (#26) 2022-11-08 19:09:21 +00:00
visualc fix empty compute image descriptor set creation 2021-01-31 14:30:16 -08:00
.drone.yml fix windows build release path 2021-02-27 15:35:46 -08:00
.editorconfig convert all spaces to tabs 2022-02-25 13:42:11 -08:00
.gitignore remove FNA3D dependency 2020-12-16 18:12:20 -08:00
.gitmodules DroneCI (#12) 2021-01-04 23:31:56 -08:00
CMakeLists.txt 1.8.2 2022-11-01 16:26:27 -07:00
LICENSE fix LICENSE file 2021-01-05 16:30:27 -08:00
README.md update build badge 2021-01-23 08:52:51 +00:00

README.md

Build Status

This is Refresh, an XNA-inspired 3D graphics library with modern capabilities.

License

Refresh is licensed under the zlib license. See LICENSE for details.

About Refresh

Refresh is directly inspired by FNA3D and intended to be a replacement for XNA's Graphics namespace. XNA 4.0 is a powerful API, but its shader system is outdated and certain restrictions are awkward to handle in a modern context. In the way that XNA was "one step above" DX9, Refresh intends to be "one step above" Vulkan. It should map nicely to modern graphics APIs. Refresh will initially have a Vulkan runtime implementation. Support for other APIs like DX12 may come later. For shaders, we consume SPIR-V bytecode.

Dependencies

Refresh depends on SDL2 for portability. Refresh never explicitly uses the C runtime.

Building Refresh

For *nix platforms, use CMake:

$ mkdir build/
$ cd build/
$ cmake ../
$ make

For Windows, use the Refresh.sln in the "visualc" folder.

Want to contribute?

Issues can be reported and patches contributed via Github:

https://github.com/thatcosmonaut/Refresh