Crate grr

Source
Expand description

Bare metal OpenGL 4.5+ wrapper

§Overview

grr aims at providing a modern and clean looking API with focus on direct state access. The terminology used follows mostly Vulkan and OpenGL.

§Initialization

The main entry point for working with the library is a Device. A device wraps an OpenGL context which needs to be created and managed externally. The documentation and examples will all use glutin for window and context management.

extern crate glutin;
extern crate grr;

fn main() -> Result<(), Box<std::error::Error>> {
    let mut events_loop = glutin::EventsLoop::new();
    let wb = glutin::WindowBuilder::new()
        .with_title("Hello grr!")
        .with_dimensions((1024.0, 768.0).into());
    let window = unsafe {
        glutin::ContextBuilder::new()
            .with_vsync(true)
            .with_srgb(true)
            .with_gl_debug_flag(true)
            .build_windowed(wb, &events_loop)?
            .make_current()
            .unwrap()
    };

    let grr = unsafe {
        grr::Device::new(
            |symbol| window.get_proc_address(symbol) as *const _,
            grr::Debug::Enable {
                callback: |_, _, _, _, msg| {
                    println!("{:?}", msg);
                },
                flags: grr::DebugReport::all(),
            },
        )
    };

    Ok(())
}

§Modules

The API has multiple concepts which interplay with each other. The main of interacting with the library is via function calls on a Device object. The calls often translate directly to one GL call. All other objects created are opaque handles!

  • Resource: Objects with associated memory. Can be a Buffer (untyped) or an Image.
  • Pipeline: There currently are two sort of pipelines supported: Graphics and Compute
  • Framebuffer: Assembles the attachments (ImageView or RenderBuffer) for draw calls
  • Sampler: Configures image filtering. An Image is bound together with a Sampler to a texture unit for access in a shader stage.
  • Vertex Array: Specifies the vertex attributes and bindings for the input assembler stage. Buffers are bound to a VertexArray to declare the memory region to fetch attribute data from.

Structs§

Barrier
Memory barrier.
BlendChannel
Buffer
BufferImageCopy
BufferRange
Buffer Range.
ColorBlend
ColorBlendAttachment
DebugReport
Debug report flags.
DepthStencil
Depth and stencil test and associated options.
Device
Logical device, representation one or multiple physical devices (hardware or software).
DeviceFeatures
Additional features supported by the device.
DeviceLimits
DispatchIndirectCmd
Indirect dispatch command structure.
DrawIndexedIndirectCmd
Indirect (indexed) draw command structure.
DrawIndirectCmd
Indirect draw command structure.
Extent
Framebuffer
Framebuffer handle.
GraphicsPipelineDesc
Graphics Pipeline Descriptor.
HostImageCopy
Image
Image resource handle.
ImageCopy
ImageView
Image view handle.
InputAssembly
Input Assembly Descriptor.
MappingFlags
Memory mapping flags.
MemoryFlags
Memory property flags.
MemoryLayout
Specifies the layout of the host or buffer memory.
MeshPipelineDesc
Multisample
Offset
Starting location for copying from or to texture data.
Pipeline
Graphics or Compute pipeline.
PipelineFlags
Pipeline link flags.
Query
QueryResultFlags
Rasterization
Rasterizer Descriptor.
Region
RegionBarrier
Memory barrier for by-region dependencies.
Renderbuffer
Renderbuffer handle.
Sampler
Sampler handle.
SamplerDesc
Sampler Descriptor.
Shader
Shader.
ShaderFlags
Shader compilation flags.
StencilFace
Stencil operation settings, per-face.
SubresourceLayers
SubresourceRange
Subresource of an image.
VertexArray
Vertex array handle.
VertexAttributeDesc
Vertex attribute format and binding.
VertexBufferView
Buffer representation for vertex attributes
VertexPipelineDesc
Viewport
Viewport transformation.

Enums§

Attachment
Attachment reference.
AttachmentView
BaseFormat
BlendFactor
BlendOp
ClearAttachment
Attachment clearing description.
Compare
Comparison operator.
ConditionalMode
Constant
Uniform constant.
CullMode
Polygon culling mode.
Debug
Device debug control.
DebugSource
Debug message source.
DebugType
Debug message type.
Error
Error return codes
Filter
Filter options for computing pixels when the texture maps to an area different from one texture element.
Format
The Format enum represents a sized internal format of texture storage. The naming convention closely follows that of Vulkan, but it has a close correspondence with OpenGL.
FormatLayout
FrontFace
Polygon front face.
ImageType
Image dimensionality type.
ImageViewType
Image View type.
IndexTy
Index size.
InputRate
Vertex attribute addresssing.
MsgFilter
Message filter.
ObjectType
PolygonMode
Polygon rendering mode.
Primitive
Primitve topology.
QueryType
SamplerAddress
Sampler addressing mode.
ShaderStage
Shader Stages.
StencilOp
VertexFormat
Vertex attribute formats.

Traits§

Object

Functions§

as_u8_slice
View a slice as raw byte slice.

Type Aliases§

DebugCallback
Result
A specialized Result type for grr operations.