renderer: Implementation comments

This commit is contained in:
Victor Brekenfeld 2021-05-24 19:28:21 +02:00
parent e696ce4c35
commit 73420b75bc
2 changed files with 9 additions and 0 deletions

View File

@ -42,6 +42,10 @@ pub mod ffi {
include!(concat!(env!("OUT_DIR"), "/gl_bindings.rs")); include!(concat!(env!("OUT_DIR"), "/gl_bindings.rs"));
} }
// This static is used to assign every created Renderer a unique ID (until is overflows...).
//
// This id is used to differenciate between user_data of different renderers, because one
// cannot assume, that resources between two renderers are (and even can be) shared.
static RENDERER_COUNTER: AtomicUsize = AtomicUsize::new(0); static RENDERER_COUNTER: AtomicUsize = AtomicUsize::new(0);
#[derive(Debug)] #[derive(Debug)]
@ -361,6 +365,7 @@ impl Gles2Renderer {
/// `EGLContext` shared with the given one (see `EGLContext::new_shared`) and can be used and destroyed on /// `EGLContext` shared with the given one (see `EGLContext::new_shared`) and can be used and destroyed on
/// any of these renderers. /// any of these renderers.
/// - This renderer has no default framebuffer, use `Bind::bind` before rendering. /// - This renderer has no default framebuffer, use `Bind::bind` before rendering.
/// - Binding a new target, while another one is already bound, will replace the current target.
/// - Shm buffers can be released after a successful import, without the texture handle becoming invalid. /// - Shm buffers can be released after a successful import, without the texture handle becoming invalid.
pub unsafe fn new<L>(context: EGLContext, logger: L) -> Result<Gles2Renderer, Gles2Error> pub unsafe fn new<L>(context: EGLContext, logger: L) -> Result<Gles2Renderer, Gles2Error>
where where

View File

@ -108,6 +108,10 @@ impl From<wayland_server::protocol::wl_output::Transform> for Transform {
/// Abstraction for Renderers, that can render into different targets /// Abstraction for Renderers, that can render into different targets
pub trait Bind<Target>: Unbind { pub trait Bind<Target>: Unbind {
/// Bind a given rendering target, which will contain the rendering results until `unbind` is called. /// Bind a given rendering target, which will contain the rendering results until `unbind` is called.
///
/// Binding to target, while another one is already bound, is rendering defined.
/// Some renderers might happily replace the current target, while other might drop the call
/// or throw an error.
fn bind(&mut self, target: Target) -> Result<(), <Self as Renderer>::Error>; fn bind(&mut self, target: Target) -> Result<(), <Self as Renderer>::Error>;
/// Supported pixel formats for given targets, if applicable. /// Supported pixel formats for given targets, if applicable.
fn supported_formats(&self) -> Option<HashSet<crate::backend::allocator::Format>> { fn supported_formats(&self) -> Option<HashSet<crate::backend::allocator::Format>> {