Struct glutin::ContextWrapper

source ·
pub struct ContextWrapper<T: ContextCurrentState, W> { /* private fields */ }
Expand description

A context which has an underlying window, which may or may not be stored separately.

If the window is stored separately, it is a RawContext<T>. Otherwise, it is a WindowedContext<T>.

Implementations§

source§

impl<T: ContextCurrentState> ContextWrapper<T, Window>

source

pub fn window(&self) -> &Window

Borrow the inner W.

source

pub unsafe fn split(self) -> (RawContext<T>, Window)

Split the Window apart from the OpenGL Context. Should only be used when intending to transfer the RawContext<T> to an other thread.

Unsaftey:

source§

impl<W> ContextWrapper<PossiblyCurrent, W>

source

pub fn swap_buffers(&self) -> Result<(), ContextError>

Swaps the buffers in case of double or triple buffering.

You should call this function every time you have finished rendering, or the image may not be displayed on the screen.

Warning: if you enabled vsync, this function will block until the next time the screen is refreshed. However drivers can choose to override your vsync settings, which means that you can’t know in advance whether swap_buffers will block or not.

source

pub fn get_pixel_format(&self) -> PixelFormat

Returns the pixel format of the main framebuffer of the context.

source

pub fn resize(&self, size: PhysicalSize)

Resize the context.

Some platforms (macOS, Wayland) require being manually updated when their window or surface is resized.

The easiest way of doing this is to take every Resized window event that is received with a LogicalSize and convert it to a PhysicalSize and pass it into this function.

source§

impl<T: ContextCurrentState, W> ContextWrapper<T, W>

source

pub fn context(&self) -> &Context<T>

Borrow the inner GL Context.

source

pub unsafe fn make_current( self ) -> Result<ContextWrapper<PossiblyCurrent, W>, (Self, ContextError)>

Sets this context as the current context. The previously current context (if any) is no longer current.

A failed call to make_current might make this, or no context current. It could also keep the previous context current. What happens varies by platform and error.

To attempt to recover and get back into a know state, either:

  • attempt to use is_current to find the new current context; or
  • call make_not_current on both the previously current context and this context.
An higher level overview.

In OpenGl, only a single context can be current in a thread at a time. Making a new context current will make the old one not current. Contexts can only be sent to different threads if they are not current.

If you call make_current on some context, you should call treat_as_not_current as soon as possible on the previously current context.

If you wish to move a currently current context to a different thread, you should do one of two options:

If you are aware of what context you intend to make current next, it is preferable for performance reasons to call make_current on that context, then treat_as_not_current on this context.

If you are not aware of what context you intend to make current next, consider waiting until you do. If you need this context not current immediately (e.g. to transfer it to an other thread), then call make_not_current on this context.

Please avoid calling make_not_current on one context only to call make_current on an other context before and/or after. This hurts performance by requiring glutin to:

  • Check if this context is current; then
  • If it is, change the current context from this context to none; then
  • Change the current context from none to the new context.

Instead prefer the method we mentioned above with make_current and treat_as_not_current.

source

pub unsafe fn make_not_current( self ) -> Result<ContextWrapper<NotCurrent, W>, (Self, ContextError)>

If this context is current, makes this context not current. If this context is not current however, this function does nothing.

Please see make_current.

source

pub unsafe fn treat_as_not_current(self) -> ContextWrapper<NotCurrent, W>

Treats this context as not current, even if it is current. We do no checks to confirm that this is actually case.

If unsure whether or not this context is current, please use make_not_current which will do nothing if this context is not current.

Please see make_current.

source

pub unsafe fn treat_as_current(self) -> ContextWrapper<PossiblyCurrent, W>

Treats this context as current, even if it is not current. We do no checks to confirm that this is actually case.

This function should only be used if you intend to track context currency without the limited aid of glutin, and you wish to store all the Contexts as NotCurrent.

Please see make_current for the prefered method of handling context currency.

source

pub fn is_current(&self) -> bool

Returns true if this context is the current one in this thread.

source

pub fn get_api(&self) -> Api

Returns the OpenGL API being used.

source§

impl<W> ContextWrapper<PossiblyCurrent, W>

source

pub fn get_proc_address(&self, addr: &str) -> *const ()

Returns the address of an OpenGL function.

Methods from Deref<Target = Context<T>>§

Trait Implementations§

source§

impl<T: Debug + ContextCurrentState, W: Debug> Debug for ContextWrapper<T, W>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: ContextCurrentState, W> Deref for ContextWrapper<T, W>

§

type Target = Context<T>

The resulting type after dereferencing.
source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<T, W> !RefUnwindSafe for ContextWrapper<T, W>

§

impl<T, W> Send for ContextWrapper<T, W>where T: Send, W: Send,

§

impl<T, W> Sync for ContextWrapper<T, W>where T: Sync, W: Sync,

§

impl<T, W> Unpin for ContextWrapper<T, W>where T: Unpin, W: Unpin,

§

impl<T, W> !UnwindSafe for ContextWrapper<T, W>

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> SetParameter for T

§

fn set<T>(&mut self, value: T) -> <T as Parameter<Self>>::Resultwhere T: Parameter<Self>,

Sets value as a parameter of self.
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.