Skip to main content

surfman/x11/
context.rs

1//! OpenGL rendering contexts on X11 via EGL.
2
3use crate::base::egl::context::EGLBackedContext;
4pub use crate::base::egl::context::{ContextDescriptor, NativeContext};
5use crate::Gl;
6
7/// Represents an OpenGL rendering context.
8///
9/// A context allows you to issue rendering commands to a surface. When initially created, a
10/// context has no attached surface, so rendering commands will fail or be ignored. Typically, you
11/// attach a surface to the context before rendering.
12///
13/// Contexts take ownership of the surfaces attached to them. In order to mutate a surface in any
14/// way other than rendering to it (e.g. presenting it to a window, which causes a buffer swap), it
15/// must first be detached from its context. Each surface is associated with a single context upon
16/// creation and may not be rendered to from any other context. However, you can wrap a surface in
17/// a surface texture, which allows the surface to be read from another context.
18///
19/// OpenGL objects may not be shared across contexts directly, but surface textures effectively
20/// allow for sharing of texture data. Contexts are local to a single thread and device.
21///
22/// A context must be explicitly destroyed with `destroy_context()`, or a panic will occur.
23pub struct Context(pub(crate) EGLBackedContext, pub(crate) Gl);