[−][src]Trait surfman::device::Device
A thread-local handle to a device.
Devices contain most of the relevant surface management methods.
Associated Types
type Connection
The connection type associated with this device.
type Context
The context type associated with this device.
type ContextDescriptor
The context descriptor type associated with this device.
type NativeContext
The native context type associated with this device.
type Surface
The surface type associated with this device.
type SurfaceTexture
The surface texture type associated with this device.
Required methods
fn native_device(
&self
) -> <Self::Connection as ConnectionInterface>::NativeDevice
&self
) -> <Self::Connection as ConnectionInterface>::NativeDevice
Returns the native device associated with this device.
fn connection(&self) -> Self::Connection
Returns the display server connection that this device was created with.
fn adapter(&self) -> <Self::Connection as ConnectionInterface>::Adapter
Returns the adapter that this device was created with.
fn gl_api(&self) -> GLApi
Returns the OpenGL API flavor that this device supports (OpenGL or OpenGL ES).
fn create_context_descriptor(
&self,
attributes: &ContextAttributes
) -> Result<Self::ContextDescriptor, Error>
&self,
attributes: &ContextAttributes
) -> Result<Self::ContextDescriptor, Error>
Creates a context descriptor with the given attributes.
Context descriptors are local to this device.
fn create_context(
&mut self,
descriptor: &Self::ContextDescriptor,
share_with: Option<&Self::Context>
) -> Result<Self::Context, Error>
&mut self,
descriptor: &Self::ContextDescriptor,
share_with: Option<&Self::Context>
) -> Result<Self::Context, Error>
Creates a new OpenGL context.
The context initially has no surface attached. Until a surface is bound to it, rendering commands will fail or have no effect.
unsafe fn create_context_from_native_context(
&self,
native_context: Self::NativeContext
) -> Result<Self::Context, Error>
&self,
native_context: Self::NativeContext
) -> Result<Self::Context, Error>
Wraps a native context object in an OpenGL context.
fn destroy_context(&self, context: &mut Self::Context) -> Result<(), Error>
Destroys a context.
The context must have been created on this device.
fn context_descriptor(&self, context: &Self::Context) -> Self::ContextDescriptor
Returns the descriptor that this context was created with.
fn make_context_current(&self, context: &Self::Context) -> Result<(), Error>
Makes the context the current OpenGL context for this thread.
After calling this function, it is valid to use OpenGL rendering commands.
fn make_no_context_current(&self) -> Result<(), Error>
Removes the current OpenGL context from this thread.
After calling this function, OpenGL rendering commands will fail until a new context is made current.
fn context_descriptor_attributes(
&self,
context_descriptor: &Self::ContextDescriptor
) -> ContextAttributes
&self,
context_descriptor: &Self::ContextDescriptor
) -> ContextAttributes
Returns the attributes that the context descriptor was created with.
fn get_proc_address(
&self,
context: &Self::Context,
symbol_name: &str
) -> *const c_void
&self,
context: &Self::Context,
symbol_name: &str
) -> *const c_void
Fetches the address of an OpenGL function associated with this context.
OpenGL functions are local to a context. You should not use OpenGL functions on one context with any other context.
This method is typically used with a function like gl::load_with()
from the gl
crate to
load OpenGL function pointers.
fn bind_surface_to_context(
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<(), (Error, Self::Surface)>
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<(), (Error, Self::Surface)>
Attaches a surface to a context for rendering.
This function takes ownership of the surface. The surface must have been created with this
context, or an IncompatibleSurface
error is returned.
If this function is called with a surface already bound, a SurfaceAlreadyBound
error is
returned. To avoid this error, first unbind the existing surface with
unbind_surface_from_context
.
If an error is returned, the surface is returned alongside it.
fn unbind_surface_from_context(
&self,
context: &mut Self::Context
) -> Result<Option<Self::Surface>, Error>
&self,
context: &mut Self::Context
) -> Result<Option<Self::Surface>, Error>
Removes and returns any attached surface from this context.
Any pending OpenGL commands targeting this surface will be automatically flushed, so the surface is safe to read from immediately when this function returns.
fn context_id(&self, context: &Self::Context) -> ContextID
Returns a unique ID representing a context.
This ID is unique to all currently-allocated contexts. If you destroy a context and create a new one, the new context might have the same ID as the destroyed one.
fn context_surface_info(
&self,
context: &Self::Context
) -> Result<Option<SurfaceInfo>, Error>
&self,
context: &Self::Context
) -> Result<Option<SurfaceInfo>, Error>
Returns various information about the surface attached to a context.
This includes, most notably, the OpenGL framebuffer object needed to render to the surface.
fn native_context(&self, context: &Self::Context) -> Self::NativeContext
Returns the native context associated with the given context.
fn create_surface(
&mut self,
context: &Self::Context,
surface_access: SurfaceAccess,
surface_type: SurfaceType<<Self::Connection as ConnectionInterface>::NativeWidget>
) -> Result<Self::Surface, Error>
&mut self,
context: &Self::Context,
surface_access: SurfaceAccess,
surface_type: SurfaceType<<Self::Connection as ConnectionInterface>::NativeWidget>
) -> Result<Self::Surface, Error>
Creates either a generic or a widget surface, depending on the supplied surface type.
Only the given context may ever render to the surface, but generic surfaces can be wrapped
up in a SurfaceTexture
for reading by other contexts.
fn create_surface_texture(
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<Self::SurfaceTexture, (Error, Self::Surface)>
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<Self::SurfaceTexture, (Error, Self::Surface)>
Creates a surface texture from an existing generic surface for use with the given context.
The surface texture is local to the supplied context and takes ownership of the surface. Destroying the surface texture allows you to retrieve the surface again.
The supplied context does not have to be the same context that the surface is associated with. This allows you to render to a surface in one context and sample from that surface in another context.
Calling this method on a widget surface returns a WidgetAttached
error.
fn destroy_surface(
&self,
context: &mut Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
&self,
context: &mut Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
Destroys a surface.
The supplied context must be the context the surface is associated with, or this returns
an IncompatibleSurface
error.
You must explicitly call this method to dispose of a surface. Otherwise, a panic occurs in
the drop
method.
fn destroy_surface_texture(
&self,
context: &mut Self::Context,
surface_texture: Self::SurfaceTexture
) -> Result<Self::Surface, (Error, Self::SurfaceTexture)>
&self,
context: &mut Self::Context,
surface_texture: Self::SurfaceTexture
) -> Result<Self::Surface, (Error, Self::SurfaceTexture)>
Destroys a surface texture and returns the underlying surface.
The supplied context must be the same context the surface texture was created with, or an
IncompatibleSurfaceTexture
error is returned.
All surface textures must be explicitly destroyed with this function, or a panic will occur.
fn surface_gl_texture_target(&self) -> c_uint
Returns the OpenGL texture target needed to read from this surface texture.
This will be GL_TEXTURE_2D
or GL_TEXTURE_RECTANGLE
, depending on platform.
fn present_surface(
&self,
context: &Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
&self,
context: &Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
Displays the contents of a widget surface on screen.
Widget surfaces are internally double-buffered, so changes to them don't show up in their associated widgets until this method is called.
The supplied context must match the context the surface was created with, or an
IncompatibleSurface
error is returned.
fn resize_surface(
&self,
context: &Self::Context,
surface: &mut Self::Surface,
size: Size2D<i32>
) -> Result<(), Error>
&self,
context: &Self::Context,
surface: &mut Self::Surface,
size: Size2D<i32>
) -> Result<(), Error>
Resizes a widget surface.
fn surface_info(&self, surface: &Self::Surface) -> SurfaceInfo
Returns various information about the surface, including the framebuffer object needed to render to this surface.
Before rendering to a surface attached to a context, you must call glBindFramebuffer()
on the framebuffer object returned by this function. This framebuffer object may or not be
0, the default framebuffer, depending on platform.
fn surface_texture_object(
&self,
surface_texture: &Self::SurfaceTexture
) -> c_uint
&self,
surface_texture: &Self::SurfaceTexture
) -> c_uint
Returns the OpenGL texture object containing the contents of this surface.
It is only legal to read from, not write to, this texture object.
Implementors
impl Device for surfman::platform::unix::generic::device::Device
[src]
type Connection = Connection
type Context = Context
type ContextDescriptor = ContextDescriptor
type NativeContext = NativeContext
type Surface = Surface
type SurfaceTexture = SurfaceTexture
fn native_device(
&self
) -> <Self::Connection as ConnectionInterface>::NativeDevice
[src]
&self
) -> <Self::Connection as ConnectionInterface>::NativeDevice
Returns the native device associated with this device.
fn connection(&self) -> Connection
[src]
fn adapter(&self) -> Adapter
[src]
fn gl_api(&self) -> GLApi
[src]
fn create_context_descriptor(
&self,
attributes: &ContextAttributes
) -> Result<Self::ContextDescriptor, Error>
[src]
&self,
attributes: &ContextAttributes
) -> Result<Self::ContextDescriptor, Error>
fn create_context(
&mut self,
descriptor: &Self::ContextDescriptor,
share_with: Option<&Self::Context>
) -> Result<Self::Context, Error>
[src]
&mut self,
descriptor: &Self::ContextDescriptor,
share_with: Option<&Self::Context>
) -> Result<Self::Context, Error>
unsafe fn create_context_from_native_context(
&self,
native_context: Self::NativeContext
) -> Result<Self::Context, Error>
[src]
&self,
native_context: Self::NativeContext
) -> Result<Self::Context, Error>
fn destroy_context(&self, context: &mut Self::Context) -> Result<(), Error>
[src]
fn context_descriptor(&self, context: &Self::Context) -> Self::ContextDescriptor
[src]
fn make_context_current(&self, context: &Self::Context) -> Result<(), Error>
[src]
fn make_no_context_current(&self) -> Result<(), Error>
[src]
fn context_descriptor_attributes(
&self,
context_descriptor: &Self::ContextDescriptor
) -> ContextAttributes
[src]
&self,
context_descriptor: &Self::ContextDescriptor
) -> ContextAttributes
fn get_proc_address(
&self,
context: &Self::Context,
symbol_name: &str
) -> *const c_void
[src]
&self,
context: &Self::Context,
symbol_name: &str
) -> *const c_void
fn bind_surface_to_context(
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<(), (Error, Self::Surface)>
[src]
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<(), (Error, Self::Surface)>
fn unbind_surface_from_context(
&self,
context: &mut Self::Context
) -> Result<Option<Self::Surface>, Error>
[src]
&self,
context: &mut Self::Context
) -> Result<Option<Self::Surface>, Error>
fn context_id(&self, context: &Self::Context) -> ContextID
[src]
fn context_surface_info(
&self,
context: &Self::Context
) -> Result<Option<SurfaceInfo>, Error>
[src]
&self,
context: &Self::Context
) -> Result<Option<SurfaceInfo>, Error>
fn native_context(&self, context: &Self::Context) -> Self::NativeContext
[src]
fn create_surface(
&mut self,
context: &Self::Context,
surface_access: SurfaceAccess,
surface_type: SurfaceType<NativeWidget>
) -> Result<Self::Surface, Error>
[src]
&mut self,
context: &Self::Context,
surface_access: SurfaceAccess,
surface_type: SurfaceType<NativeWidget>
) -> Result<Self::Surface, Error>
fn create_surface_texture(
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<Self::SurfaceTexture, (Error, Self::Surface)>
[src]
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<Self::SurfaceTexture, (Error, Self::Surface)>
fn destroy_surface(
&self,
context: &mut Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
[src]
&self,
context: &mut Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
fn destroy_surface_texture(
&self,
context: &mut Self::Context,
surface_texture: Self::SurfaceTexture
) -> Result<Self::Surface, (Error, Self::SurfaceTexture)>
[src]
&self,
context: &mut Self::Context,
surface_texture: Self::SurfaceTexture
) -> Result<Self::Surface, (Error, Self::SurfaceTexture)>
fn surface_gl_texture_target(&self) -> c_uint
[src]
fn present_surface(
&self,
context: &Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
[src]
&self,
context: &Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
fn resize_surface(
&self,
context: &Context,
surface: &mut Surface,
size: Size2D<i32>
) -> Result<(), Error>
[src]
&self,
context: &Context,
surface: &mut Surface,
size: Size2D<i32>
) -> Result<(), Error>
fn surface_info(&self, surface: &Self::Surface) -> SurfaceInfo
[src]
fn surface_texture_object(
&self,
surface_texture: &Self::SurfaceTexture
) -> c_uint
[src]
&self,
surface_texture: &Self::SurfaceTexture
) -> c_uint
impl Device for surfman::platform::unix::wayland::device::Device
[src]
type Connection = Connection
type Context = Context
type ContextDescriptor = ContextDescriptor
type NativeContext = NativeContext
type Surface = Surface
type SurfaceTexture = SurfaceTexture
fn native_device(
&self
) -> <Self::Connection as ConnectionInterface>::NativeDevice
[src]
&self
) -> <Self::Connection as ConnectionInterface>::NativeDevice
Returns the native device associated with this device.
fn connection(&self) -> Connection
[src]
fn adapter(&self) -> Adapter
[src]
fn gl_api(&self) -> GLApi
[src]
fn create_context_descriptor(
&self,
attributes: &ContextAttributes
) -> Result<Self::ContextDescriptor, Error>
[src]
&self,
attributes: &ContextAttributes
) -> Result<Self::ContextDescriptor, Error>
fn create_context(
&mut self,
descriptor: &Self::ContextDescriptor,
share_with: Option<&Self::Context>
) -> Result<Self::Context, Error>
[src]
&mut self,
descriptor: &Self::ContextDescriptor,
share_with: Option<&Self::Context>
) -> Result<Self::Context, Error>
unsafe fn create_context_from_native_context(
&self,
native_context: Self::NativeContext
) -> Result<Self::Context, Error>
[src]
&self,
native_context: Self::NativeContext
) -> Result<Self::Context, Error>
fn destroy_context(&self, context: &mut Self::Context) -> Result<(), Error>
[src]
fn context_descriptor(&self, context: &Self::Context) -> Self::ContextDescriptor
[src]
fn make_context_current(&self, context: &Self::Context) -> Result<(), Error>
[src]
fn make_no_context_current(&self) -> Result<(), Error>
[src]
fn context_descriptor_attributes(
&self,
context_descriptor: &Self::ContextDescriptor
) -> ContextAttributes
[src]
&self,
context_descriptor: &Self::ContextDescriptor
) -> ContextAttributes
fn get_proc_address(
&self,
context: &Self::Context,
symbol_name: &str
) -> *const c_void
[src]
&self,
context: &Self::Context,
symbol_name: &str
) -> *const c_void
fn bind_surface_to_context(
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<(), (Error, Self::Surface)>
[src]
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<(), (Error, Self::Surface)>
fn unbind_surface_from_context(
&self,
context: &mut Self::Context
) -> Result<Option<Self::Surface>, Error>
[src]
&self,
context: &mut Self::Context
) -> Result<Option<Self::Surface>, Error>
fn context_id(&self, context: &Self::Context) -> ContextID
[src]
fn context_surface_info(
&self,
context: &Self::Context
) -> Result<Option<SurfaceInfo>, Error>
[src]
&self,
context: &Self::Context
) -> Result<Option<SurfaceInfo>, Error>
fn native_context(&self, context: &Self::Context) -> Self::NativeContext
[src]
fn create_surface(
&mut self,
context: &Self::Context,
surface_access: SurfaceAccess,
surface_type: SurfaceType<NativeWidget>
) -> Result<Self::Surface, Error>
[src]
&mut self,
context: &Self::Context,
surface_access: SurfaceAccess,
surface_type: SurfaceType<NativeWidget>
) -> Result<Self::Surface, Error>
fn create_surface_texture(
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<Self::SurfaceTexture, (Error, Self::Surface)>
[src]
&self,
context: &mut Self::Context,
surface: Self::Surface
) -> Result<Self::SurfaceTexture, (Error, Self::Surface)>
fn destroy_surface(
&self,
context: &mut Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
[src]
&self,
context: &mut Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
fn destroy_surface_texture(
&self,
context: &mut Self::Context,
surface_texture: Self::SurfaceTexture
) -> Result<Self::Surface, (Error, Self::SurfaceTexture)>
[src]
&self,
context: &mut Self::Context,
surface_texture: Self::SurfaceTexture
) -> Result<Self::Surface, (Error, Self::SurfaceTexture)>
fn surface_gl_texture_target(&self) -> c_uint
[src]
fn present_surface(
&self,
context: &Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
[src]
&self,
context: &Self::Context,
surface: &mut Self::Surface
) -> Result<(), Error>
fn resize_surface(
&self,
context: &Context,
surface: &mut Surface,
size: Size2D<i32>
) -> Result<(), Error>
[src]
&self,
context: &Context,
surface: &mut Surface,
size: Size2D<i32>
) -> Result<(), Error>
fn surface_info(&self, surface: &Self::Surface) -> SurfaceInfo
[src]
fn surface_texture_object(
&self,
surface_texture: &Self::SurfaceTexture
) -> c_uint
[src]
&self,
surface_texture: &Self::SurfaceTexture
) -> c_uint
impl<Def, Alt> Device for surfman::platform::generic::multi::device::Device<Def, Alt> where
Def: DeviceInterface,
Alt: DeviceInterface,
Def::Connection: ConnectionInterface<Device = Def>,
Alt::Connection: ConnectionInterface<Device = Alt>,
[src]
Def: DeviceInterface,
Alt: DeviceInterface,
Def::Connection: ConnectionInterface<Device = Def>,
Alt::Connection: ConnectionInterface<Device = Alt>,
type Connection = Connection<Def, Alt>
type Context = Context<Def, Alt>
type ContextDescriptor = ContextDescriptor<Def, Alt>
type NativeContext = NativeContext<Def, Alt>
type Surface = Surface<Def, Alt>
type SurfaceTexture = SurfaceTexture<Def, Alt>
fn native_device(&self) -> NativeDevice<Def, Alt>
[src]
fn connection(&self) -> Connection<Def, Alt>
[src]
fn adapter(&self) -> Adapter<Def, Alt>
[src]
fn gl_api(&self) -> GLApi
[src]
fn create_context_descriptor(
&self,
attributes: &ContextAttributes
) -> Result<Self::ContextDescriptor, Error>
[src]
&self,
attributes: &ContextAttributes
) -> Result<Self::ContextDescriptor, Error>
fn create_context(
&mut self,
descriptor: &ContextDescriptor<Def, Alt>,
share_with: Option<&Context<Def, Alt>>
) -> Result<Context<Def, Alt>, Error>
[src]
&mut self,
descriptor: &ContextDescriptor<Def, Alt>,
share_with: Option<&Context<Def, Alt>>
) -> Result<Context<Def, Alt>, Error>
unsafe fn create_context_from_native_context(
&self,
native_context: Self::NativeContext
) -> Result<Context<Def, Alt>, Error>
[src]
&self,
native_context: Self::NativeContext
) -> Result<Context<Def, Alt>, Error>
fn destroy_context(&self, context: &mut Context<Def, Alt>) -> Result<(), Error>
[src]
fn native_context(&self, context: &Context<Def, Alt>) -> Self::NativeContext
[src]
fn context_descriptor(
&self,
context: &Context<Def, Alt>
) -> Self::ContextDescriptor
[src]
&self,
context: &Context<Def, Alt>
) -> Self::ContextDescriptor
fn make_context_current(&self, context: &Context<Def, Alt>) -> Result<(), Error>
[src]
fn make_no_context_current(&self) -> Result<(), Error>
[src]
fn context_descriptor_attributes(
&self,
context_descriptor: &ContextDescriptor<Def, Alt>
) -> ContextAttributes
[src]
&self,
context_descriptor: &ContextDescriptor<Def, Alt>
) -> ContextAttributes
fn get_proc_address(
&self,
context: &Context<Def, Alt>,
symbol_name: &str
) -> *const c_void
[src]
&self,
context: &Context<Def, Alt>,
symbol_name: &str
) -> *const c_void
fn bind_surface_to_context(
&self,
context: &mut Context<Def, Alt>,
surface: Surface<Def, Alt>
) -> Result<(), (Error, Surface<Def, Alt>)>
[src]
&self,
context: &mut Context<Def, Alt>,
surface: Surface<Def, Alt>
) -> Result<(), (Error, Surface<Def, Alt>)>
fn unbind_surface_from_context(
&self,
context: &mut Context<Def, Alt>
) -> Result<Option<Surface<Def, Alt>>, Error>
[src]
&self,
context: &mut Context<Def, Alt>
) -> Result<Option<Surface<Def, Alt>>, Error>
fn context_id(&self, context: &Context<Def, Alt>) -> ContextID
[src]
fn context_surface_info(
&self,
context: &Context<Def, Alt>
) -> Result<Option<SurfaceInfo>, Error>
[src]
&self,
context: &Context<Def, Alt>
) -> Result<Option<SurfaceInfo>, Error>
fn create_surface(
&mut self,
context: &Context<Def, Alt>,
surface_access: SurfaceAccess,
surface_type: SurfaceType<NativeWidget<Def, Alt>>
) -> Result<Surface<Def, Alt>, Error>
[src]
&mut self,
context: &Context<Def, Alt>,
surface_access: SurfaceAccess,
surface_type: SurfaceType<NativeWidget<Def, Alt>>
) -> Result<Surface<Def, Alt>, Error>
fn create_surface_texture(
&self,
context: &mut Context<Def, Alt>,
surface: Surface<Def, Alt>
) -> Result<SurfaceTexture<Def, Alt>, (Error, Surface<Def, Alt>)>
[src]
&self,
context: &mut Context<Def, Alt>,
surface: Surface<Def, Alt>
) -> Result<SurfaceTexture<Def, Alt>, (Error, Surface<Def, Alt>)>
fn destroy_surface(
&self,
context: &mut Context<Def, Alt>,
surface: &mut Surface<Def, Alt>
) -> Result<(), Error>
[src]
&self,
context: &mut Context<Def, Alt>,
surface: &mut Surface<Def, Alt>
) -> Result<(), Error>
fn destroy_surface_texture(
&self,
context: &mut Context<Def, Alt>,
surface_texture: SurfaceTexture<Def, Alt>
) -> Result<Surface<Def, Alt>, (Error, SurfaceTexture<Def, Alt>)>
[src]
&self,
context: &mut Context<Def, Alt>,
surface_texture: SurfaceTexture<Def, Alt>
) -> Result<Surface<Def, Alt>, (Error, SurfaceTexture<Def, Alt>)>
fn surface_gl_texture_target(&self) -> c_uint
[src]
fn present_surface(
&self,
context: &Context<Def, Alt>,
surface: &mut Surface<Def, Alt>
) -> Result<(), Error>
[src]
&self,
context: &Context<Def, Alt>,
surface: &mut Surface<Def, Alt>
) -> Result<(), Error>
fn resize_surface(
&self,
context: &Context<Def, Alt>,
surface: &mut Surface<Def, Alt>,
size: Size2D<i32>
) -> Result<(), Error>
[src]
&self,
context: &Context<Def, Alt>,
surface: &mut Surface<Def, Alt>,
size: Size2D<i32>
) -> Result<(), Error>
fn surface_info(&self, surface: &Surface<Def, Alt>) -> SurfaceInfo
[src]
fn surface_texture_object(
&self,
surface_texture: &SurfaceTexture<Def, Alt>
) -> c_uint
[src]
&self,
surface_texture: &SurfaceTexture<Def, Alt>
) -> c_uint