docs: doc image

This commit is contained in:
chyyran 2023-01-13 18:23:31 -05:00
parent 3f3712eaa4
commit fa68b20c19
2 changed files with 24 additions and 5 deletions

View file

@ -32,26 +32,33 @@ of DirectX and OpenGL, as well as Metal, are not supported (but pull-requests ar
librashader provides both a Rust API under the `librashader` crate, and a C API. Both APIs are first-class, fully supported. librashader provides both a Rust API under the `librashader` crate, and a C API. Both APIs are first-class, fully supported.
The librashader C API is best used by linking statically with `librashader_ld`, which implements a loader that dynamically The librashader C API is best used by linking statically with `librashader_ld`, which implements a loader that dynamically
loads the librashader (`librashader.so` or `librashader.dll`) implementation in the search path. loads the librashader (`librashader.so` or `librashader.dll`) implementation in the search path. You may also link against
`librashader_capi` directly with [`librashader.h`](https://github.com/SnowflakePowered/librashader/blob/master/librashader-capi/librashader.h).
Note that the Rust crate requires nightly Rust to build. The C API currently does not expose the [shader reflection API](https://docs.rs/librashader/latest/librashader/reflect/index.html). Work
is in progress to expose this to C. In the meanwhile, if you wish to implement a custom runtime for librashader, it will have to be done
in Rust.
### C ABI Compatibility ### C ABI Compatibility
Since the recommended way of integrating `librashader` is by the `librashader_ld` single header library, ABI stability The recommended way of integrating `librashader` is by the `librashader_ld` single header library, ABI stability
is important to ensure that updates to librashader do not break existing consumers. is important to ensure that updates to librashader do not break existing consumers.
Pre-1.0, nothing is guaranteed to be stable, but the following APIs are unlikely to change their ABI. Pre-1.0, nothing is guaranteed to be stable, but the following APIs are unlikely to change their ABI unless otherwise indicated.
* `libra_preset_*` * `libra_preset_*`
* `libra_error_*` * `libra_error_*`
The following APIs, mostly runtime, are more likely to change their ABI. The following APIs, mostly runtime, are more likely to change their ABI before a 1.0 release as I experiment with what
works best.
* `libra_gl_*` * `libra_gl_*`
* `libra_vk_*` * `libra_vk_*`
* `libra_d3d11_*` * `libra_d3d11_*`
* `libra_d3d12_*` * `libra_d3d12_*`
If you do not mind linking against `librashader_capi` directly, [`librashader.h`](https://github.com/SnowflakePowered/librashader/blob/master/librashader-capi/librashader.h)
is unlikely to break API stability.
## Compatibility ## Compatibility
librashader implements the entire RetroArch shader pipeline and is highly compatible with existing shaders, librashader implements the entire RetroArch shader pipeline and is highly compatible with existing shaders,

View file

@ -4,16 +4,28 @@ use std::marker::PhantomData;
use std::path::Path; use std::path::Path;
/// An uncompressed raw image ready to upload to GPU buffers.
pub struct Image<P: PixelFormat = RGBA8> { pub struct Image<P: PixelFormat = RGBA8> {
/// The raw bytes of the image.
pub bytes: Vec<u8>, pub bytes: Vec<u8>,
/// The size dimensions of the image.
pub size: Size<u32>, pub size: Size<u32>,
/// The byte pitch of the image.
pub pitch: usize, pub pitch: usize,
_pd: PhantomData<P>, _pd: PhantomData<P>,
} }
/// R8G8B8A8 pixel format.
///
/// Every RGB with alpha pixel is represented with 32 bits.
pub struct RGBA8; pub struct RGBA8;
/// B8G8R8A8 pixel format.
///
/// Every BGR with alpha pixel is represented with 32 bits.
pub struct BGRA8; pub struct BGRA8;
/// Represents an image pixel format to convert images into.
pub trait PixelFormat { pub trait PixelFormat {
#[doc(hidden)] #[doc(hidden)]
fn convert(pixels: &mut Vec<u8>); fn convert(pixels: &mut Vec<u8>);