[][src]Crate grr

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 suppoerted: 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
BufferRange

Buffer Range.

ColorBlend
ColorBlendAttachment
DebugReport

Debug report flags.

DepthStencil
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.

Image

Image resource handle.

ImageView

Image view handle.

InputAssembly

Input Assembly Descriptor.

MappingFlags

Memory mapping flags.

MemoryFlags

Memory property flags.

MeshPipelineDesc
Multisample
Offset
Pipeline

Graphics or Compute pipeline.

Query
Rasterization

Rasteriyer Descriptor.

Region
RegionBarrier

Memory barrier for by-region dependencies.

Renderbuffer

Renderbuffer handle.

Sampler

Sampler handle.

SamplerDesc

Sampler Descriptor.

Shader

Shader.

StencilFace
SubresourceLayout
SubresourceLevel
SubresourceRange

Subresource of an image.

VertexArray

Vertex array handle.

VertexAttributeDesc
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
Format
FormatLayout
FrontFace

Polygon front face.

ImageType

Image dimensionality type.

ImageViewType
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 Definitions

DebugCallback
Result

A specialized Result type for grr operations.