glium 0.32.1

Elegant and safe OpenGL wrapper. Glium is an intermediate layer between OpenGL and your application. You still need to manually handle the graphics pipeline, but without having to use OpenGL's old and error-prone API. Its objectives: - Be safe to use. Many aspects of OpenGL that can trigger a crash if misused are automatically handled by glium. - Provide an API that enforces good pratices such as RAII or stateless function calls. - Be compatible with all OpenGL versions that support shaders, providing unified API when things diverge. - Avoid all OpenGL errors beforehand. - Produce optimized OpenGL function calls, and allow the user to easily use modern OpenGL techniques.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
# Changelog

## Version 0.32.1 (2022-07-31)

- Bugfix release to not panic when given multiple vertex attributes with unspecified location numbers.

## Version 0.32.0 (2022-07-30)

- Updated glutin to version 0.29.0. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0290-2022-07-30.
- Support for location binding for Vertex attributes.

## Version 0.31 (2021-12-11)

- Updated glutin to version 0.28.0. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0280-2021-12-02.
- Use mdbook for the book.

## Version 0.30.2 (2021-09-06)

- Added depth and stencil buffer blitting.
- Added dual source blending.
- Implemented AsUniformValue for Texture2d directly.

## Version 0.30.1 (2021-07-12)

- Added `ClientFormat::U1U5U5U5Reversed`.
- Updated `ouroboros` to 0.10.

## Version 0.30.0 (2021-06-23)

- Updated glutin to version 0.27.0. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0270-2021-06-01.
- Replaced unmaintained `rental` with `ouroboros`.
- Allow instancing on GLES3 or later.
- Support for importing and using Vulkan semaphores.
- Made `Content::read` an unsafe API.
- Modernized and fixed the third chapter of the tutorial.

## Version 0.29.1 (2021-04-22)

- Updated rand to 0.8.
- Updated cgmath to 0.18.
- Made `UniformsStorage` implement `Copy` and `Clone`.
- Use `$crate::uniform!` internally.
- Implemented `From` instead of `Into` for some conversions.

## Version 0.29.0 (2020-12-15)

- Updated glutin to version 0.26.0. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0260-2020-12-10.
- Updated memoffset to 0.6.
- Added support for `glPolygonOffset`.
- Added support for loading SPIR-V shaders.
- Switched to edition 2018.
- Switched from Travis CI to Github Actions

## Version 0.28.0 (2020-10-03)

- Updated glutin to version 0.25.0. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0250-2020-10-02.
- Implemented atomic counters.
- Added `CubeMapArrays` support.

## Version 0.27.0 (2020-03-26)

- Updated glutin to version 0.24.0. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0240-2020-03-11.

## Version 0.26.0 (2020-02-09)

- Updated glutin to version 0.23.0. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0230-2020-02-06.
- Removal of some unsound code that rustc warns about
- Report the precise shader stage in which a shader failed compilation

## Version 0.25.1 (2019-07-08)

- Silenced deprecation warning when invoking `implement_vertex`.

## Version 0.25.0 (2019-05-24)

- Updated glutin to version 0.21.

## Version 0.24.0 (2019-04-08)

 - Updated glutin to version 0.20. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0200-2019-03-09.
 - Depth comparison and shadow mapping ([#1679]https://github.com/glium/glium/pull/1679).

## Version 0.23.0 (2018-12-05)

 - Updated glutin to version 0.19. See the glutin release notes [here]https://github.com/rust-windowing/glutin/blob/master/CHANGELOG.md#version-0190-2018-11-09.

## Version 0.22.0 (2018-07-02)

 - Updated glutin to version 0.17.
 - Updated glutin to version 0.16. Added 'icon_loading' feature.

## Version 0.21.0 (2018-04-11)

 - Updated glutin to version 0.14. Fixes handling of HiDPI on macOS.
 - Updated gl_generator to version 0.9.

## Version 0.20.0 (2018-01-22)

 - Updated glutin to version 0.12.
 - Updated smallvec from version 0.4 to 0.6.
 - Updated misc internal dependencies and dev-dependencies (lazy_static, cgmath, rand, image, gl_generator).
 - Replaced the `IntoVerticesSource` trait with `Into<VerticesSource>`.
 - Fixed [rendering bug]https://github.com/glium/glium/issues/1657 on high-DPI screens.
 - Added support for clipping via `gl_ClipDistance`.
 - Enabled [depth-stencil FBO attachments]https://github.com/glium/glium/issues/253.

## Version 0.19.0 (2017-12-11)

 - Updated glutin to version 0.11. Notably includes the [winit 0.9 update]https://github.com/rust-windowing/winit/blob/master/CHANGELOG.md#version-090-2017-12-01.
 - Updated gl_generator to 0.7 (internal dependency).

## Version 0.18.1 (2017-11-05)

 - Fixed links pointing to tomaka/glium instead of glium/glium
 - Various documentation updates, bugfixes, and dependency updates.

## Version 0.18.0 (2017-10-15)

 - Updated glutin to version 0.10.
 - Added support for is_buffer_supported usage on all buffer types.
 - Various documentation updates and bugfixes.

## Version 0.17.1 (2017-08-27)

 - Changed documentation to docs.rs.
 - Various bugfixes and updates to internal dependencies.

## Version 0.17.0 (2017-07-12)

 - Updated glutin to version 0.9.
 - Redesigned API around EventsLoop to match updated winit design.
 - Added support for vector normalization.
 - Various bugfixes.

## Version 0.16.0 (2017-01-07)

 - Added asynchronous screenshot example.
 - Updated tutorials to compile on Mac OS X.
 - Various tutorial documentation updates.
 - Fix buffer reads which could fail being safe.
 - Various bugfixes.

## Version 0.15.0 (2016-07-03)

 - Updated glutin to version 0.6.1
 - Various internal dependency updates.

## Version 0.14.0 (2016-04-11)

 - Updated glutin to version 0.5.
 - Various bugfixes.

## Version 0.13.5 (2016-02-04)

 - Fixed integer textures using a forbidden filtering by default.
 - Better error report in case of a uniform block layout mismatch.

## Version 0.13.4 (2016-01-21)

 - Added support for shader subroutines.
 - Added various functions to `Context` to retrieve information (like the content of `GL_VENDOR` or `GL_RENDERER` for example).
 - Added additional dimensions getters to the various texture types.

## Version 0.13.3 (2016-01-08)

 - Added constructors to `SimpleFrameBuffer` for depth-only, depth-stencil-only, stencil-only and depth & stencil framebuffers.

## Version 0.13.2 (2015-12-21)

 - Fixed compilation on ARM platform.
 - Added a hack to make screenshots and video taken with the FRAPS software work.

## Version 0.13.1 (2015-12-15)

 - `raw_read_to_pixel_buffer` now accepts all pixel types.

## Version 0.13.0 (2015-12-12)

 - Removed native support for cgmath and nalgebra in avoid to avoid dependency hell.
 - Reworked the layer-related, level-related functions and `into_image` from texture types where they are not relevant.
 - The `Backend::get_proc_address` function now takes a `*const std::os::raw::c_void` instead of a `*const ()`.

## Version 0.12.4 (2015-12-12)

 - Added small hack to make glium work with WebGL.
 - Fixed blend color state not being always updated.

## Version 0.12.3 (2015-12-04)

 - Added `raw_clear_buffer` to `TextureAnyImage`, which allows you to clear the content of any texture.
 - Added `TextureAny::from_id` to manipulate an unowned texture.

## Version 0.12.2 (2015-11-25)

 - Fixed a bug when matching frag output locations with framebuffer attachments.

## Version 0.12.1 (2015-11-25)

 - Added `MultiOutputFrameBuffer::with_stencil`, `with_depth_stencil` and `with_depth_and_stencil`.
 - Implemented the `ToColorAttachment` trait for unsigned and integral textures.
 - Implemented the `ToXAttachment` traits for the `XAttachment` types.
 - It is now possible to use another format than `(u8, u8, u8, u8)` with `raw_read` on a texture.

## Version 0.12.0 (2015-11-21)

 - Removed the "image" feature and native support for the `image`. You now have to perform conversions yourself.
 - The `Backend::get_proc_address` function now takes a `*const ()` instead of a `*const libc::c_void`.
 - Creating a `MultiOutputFrameBuffer` now requires passing an iterator instead of a `Vec`.
 - When checking a uniform block's layout, `[f32; 4]` now matches both `vec4` and `float[4]` instead of just `vec4` before. Same for all other arrays between 1 and 4 elements.
 - `UniformBlock` is now implemented for `[T; N]` where N is between 5 and 32, plus 64, 128, 256, 512, 1024 and 2048.
 - When checking a uniform block's layout, arrays (sized and unsized) now match structs with a single member that is an array.

## Version 0.11.1 (2015-11-10)

 - Fix broken compilation after libc 0.2.

## Version 0.11.0 (2015-11-04)

 - Updated the versions of glutin, image and cgmath.
 - Improved performance of stencil-related state changes.
 - Fixed `glBufferData` being called to invalidate a buffer created with `glBufferStorage`.
 - Changed use of `Range` in buffer slice to `RangeArgument`.

## Version 0.10.0 (2015-10-14)

 - Update glutin to 0.4, cgmath to 0.3 and nalgebra to 0.3.
 - Add the possibility to set the behavior of the debug callback in `Context::new`.
 - Add `build_glium_debug` and `build_glium_unchecked_debug` to set the behavior of the debug callback at initialization.
 - Rename `ClockWise` to `Clockwise`.
 - The `program!` macro now returns a `ProgramChooserCreationError` and no longer panics if no version is found.
 - Remove the `Texture` trait. All of its methods are already implemented on all texture types already.
 - Rename `UniformBlock::binding` to `id` and add `initial_binding`.

## Version 0.9.3 (2015-10-13)

 - Fixed an invalid enum error during initialization.

## Version 0.9.2 (2015-10-11)

 - Add `is_color_renderable` to the color image formats.
 - Fixed glium erroneously using a SSBO's and a uniform buffer's binding point instead of index.
 - Fixed `glInvalidateBuffer(Sub)Data` being called for persistent-mapped buffers.

## Version 0.9.1 (2015-09-30)

 - Add `ComputeShader::execute_indirect`.
 - Add support for 64bits integer uniforms.
 - `copy_to` now takes a `Into<BufferSlice>` instead of a `BufferSlice`.
 - Glium no longer calls `glBlendColor` if the blending algorithm doesn't use it.
 - Deprecated `DrawParameters::validate`.

## Version 0.9.0 (2015-09-15)

 - The blending, depth and stencil functions now use dedicated structs named `Blend`, `Depth` and `Stencil`.
 - `SimpleFrameBuffer` and `MultiOutputFrameBuffer`'s constructors now return a `Result`.
 - Creating a renderbuffer now returns a `Result`.
 - Add support for empty framebuffers with the `EmptyFrameBuffer` type.
 - Fix an OpenGL error when mapping a buffer with `map_read`.
 - Glium no longer panics in case of OpenGL error. It prints a message with backtrace on stdout instead.
 - Removed the `DrawParametersBuilder` struct.
 - Add `clear_color_srgb` and derivates. The `clear` method has an additional `color_srgb: bool` parameter.
 - Added some state changes when swapping buffers to adapt to the FRAPS software.
 - Removed `StencilTexture3d` are they are not supported by OpenGL.

## Version 0.8.7 (2015-08-27)

 - Fix a panic when creating a stencil renderbuffer or texture.
 - Add support for `f64` uniforms.

## Version 0.8.6 (2015-08-26)

 - Renamed `BufferView` to `Buffer`. `BufferView` still exists for backward compatibility.
 - Add a `copy_to` method to buffers.
 - Add support for the `GL_OES_element_index_uint` extension.
 - Fixed OpenGL ES 3.2 not working.
 - Add support for `IntVec{2|3|4}` and `UnsignedIntVec{2|3|4}` uniform types.
 - Add a work-around for Radeon drivers crashing with 32+ texture units.
 - Add support for `boolean` uniforms.
 - Add support for `BoolVec{2|3|4}` uniform types.

## Version 0.8.5 (2015-08-12)

 - Added support for cubemaps and cubemap arrays. Not all operations are available yet.
 - `DrawParameters` no longer implements `Copy`.
 - Add support for OpenGL ES 3.2 for geometry shaders, tessellation shaders, robustness, debug output, buffer textures, stencil textures, base vertex.
 - Add support for `GL_OES_geometry_shader`, `GL_OES_tessellation_shader` `GL_OES_draw_elements_base_vertex`, `GL_OES_draw_elements_base_vertex`.
 - Add support for specifying the primitive bounding box as an optimization hint to the backend.
 - Added various `is_texture_*_supported` functions in the `texture` module to check whether a texture type is supported.

## Version 0.8.4 (2015-08-10)

 - Added `#[inline]` attributes on many functions.
 - Added `slice_custom` and `slice_custom_mut` to buffers, which allow you to get slices over anything inside the buffer.
 - Added `Query::to_buffer_u32` to write the result of a query to a buffer.
 - Added `is_supported` functions for all the texture and renderbuffer formats.
 - Added missing `I16I16I16I16` and `U16U16U16` float formats. Renamed `U3U32U`to `U3U3U2`.
 - Various fixes and improvements when determining whether a format is supported.
 - Changed the `framebuffer::To*Attachment` traits with a lifetime parameter, and to take by value instead of by reference.
 - The `framebuffer::To*Attachment` traits are now implemented on `TextureLayerMipmap` structs.
 - Fixed `.layer()` function returning `None` when it shouldn't.
 - GLSL ES 3.2 is now recognized.

## Version 0.8.3 (2015-08-04)

 - Textures are now inside submodules (for example `Texture2d` is in `texture::texture2d::Texture2d`) and reexported from `texture`.
 - Added `Context::flush()` and `Context::finish()`. Deprecated `Context::synchronize`.
 - Removed `Sized` constraint for `Surface` that was preventing one from using `&Surface` or `&mut Surface`.
 - Added `TextureAnyMipmap::raw_upload_from_pixel_buffer`.
 - Moved the `pixel_buffer` module to `texture::pixel_buffer` (the old module still exists for backward compatibility).

## Version 0.8.2 (2015-07-29)

 - Added a `buffer_texture` module in `texture`.
 - Added `DrawParameters::depth_clamp` and `DrawError::DepthClampNotSupported`.

## Version 0.8.1 (2015-07-27)

 - Added `DrawParameters::ProvokingVertex` and `DrawError::ProvokingVertexNotSupported`.
 - Added `DrawError::RasterizerDiscardNotSupported`.
 - `DrawParametersBuilder` is now deprecated.
 - `ProgramCreationInput` now has a `outputs_srgb` member.
 - Fixed a bug with offsets of members in arrays.
 - Added support for the `GL_EXT_geometry_shader` OpenGL ES extension.

## Version 0.8.0 (2015-07-19)

 - Removed all Cargo features related to OpenGL compatibility.
 - Replaced all `new_if_supported` or `empty_if_supported` functions with `new` or `empty` and a proper error type.
 - All `new` and `empty` constructors now return an error if the operation is not supported.
 - `VertexBuffer` and `IndexBuffer` constructors now take a `&[T]`.
 - Updated glutin to version 0.3.
 - `BufferView`'s constructors now take a `BufferMode`.
 - Replaced `read` and `read_if_supported` with `read` that returns a `ReadError`.
 - Added `buffer::is_buffer_read_supported`.
 - Removed the deprecated `new_empty` function from textures.
 - Reworked `TextureCreationError` and removed `TextureMaybeSupportedCreationError`.
 - `new` and `dynamic` are now less specialized, which should fix some performance bottlenecks.
 - All buffer constructors now come in four variants: `new`, `dynamic`, `persistent`, `immutable`.
 - Add support for all missing vertex attributes.
 - Fixed stencil operations sometimes not working.

## Version 0.7.1 (2015-07-14)

 - Glium now automatically calls `glDraw*BaseVertex` if it is supported.
 - Added the `CapabilitiesSource` trait implemented automatically on all types that implement `Facade`.
 - Added `is_supported` to `IndexType`, `Index`, `PrimitiveType`, `Attribute` and `AttributeType`.
 - Added `ComputeShader::is_supported`, `program::is_geometry_shader_supported` and `program::is_tessellation_shader_supported`.
 - The `implement_buffer_content!` and `implement_block_layout!` macros can now take a struct with a lifetime parameter by passing `Foo<'a>` instead of `Foo`.

## Version 0.7.0 (2015-07-08)

 - Buffers now contain a single, possibly unsized, element. `BufferView<T>` is now `BufferView<[T]>`.
 - Creating an empty `BufferView<[T]>` now requires calling `empty_array` instead of `empty`.
 - `BufferView::write` now takes a `&T` instead of a `P where P: AsRef<[T]>`. This means that you can no longer pass `Vec`s by value for example.
 - Removed the mock methods from `UniformBuffer` as they are available through the `Deref` to `BufferView`.
 - The `UniformBlock` trait is now implemented on `DrawCommandNoIndices` and `DrawCommandIndices`.
 - Added the `implement_buffer_content!` macro to put on unsized struct so that you can put them inside buffers.
 - Added a `uniforms::LayoutMismatchError` as an additional field to `DrawError::UniformBlockLayoutMismatch`.
 - Changed `UniformBlock::matches` to return a `Result<(), UniformBlockLayoutMismatch>`.
 - Removed the `matches` function from the `AsUniformValue` trait.
 - Removed `TextureSurface` in favor of `SimpleFrameBuffer`.

## Version 0.6.7 (2015-07-06)

 - Added `DrawCommandsIndicesBuffer` for multidraw elements indirect.
 - Added `ResidentTexture`, `TextureHandle` and `Texture::resident_if_supported()` for bindless textures.
 - Buffers no longer require their content to be `Send` or `'static` (except for types with the `Any` suffix).
 - Renamed `texture::TextureType` to `Dimensions`.
 - Added `Context::get_opengl_version()` and deprecated `get_version()`.

## Version 0.6.6 (2015-07-03)

 - Buffers with persistent mapping now synchronize individual segments of the buffer instead of the buffer as a whole.
 - Dynamic sized arrays are now properly handled by the introspection system.
 - Added support for matrix shader attributes.
 - Fixed the value of `depth_write` being ignored if `depth_test` was `Overwrite`.

## Version 0.6.5 (2015-06-29)

 - Renamed and changed `UniformBlockMember` to `BlockLayout`.
 - Added `map_read()` and `map_write()` to buffers.
 - Various bugfixes related to queries.
 - Added a `implement_uniform_block!` macro for uniform buffers and SSBOs similar to `implement_vertex!`.
 - Added `UniformBuffer::empty` and `UniformBuffer::empty_if_supported`.
 - Fixed sRGB being disabled when clearing before drawing for the first time.

## Version 0.6.4

 - Fixed an OpenGL error if GL_ARB_robustness was present with OpenGL < 3.0.
 - Now using the `GL_APPLE_SYNC` extension if OpenGL ES 3.0 is not available.
 - Now using the `GL_EXT_buffer_storage` extension on OpenGL ES if it is available.
 - Slightly improved performances when using a dynamic buffer.
 - Added `GL_PROGRAM_POINT_SIZE` support to `Program`.

## Version 0.6.3

 - Fixed the OpenGL compatibility check for SSBO reflection.
 - Fixed a potential OpenGL error if uniform buffer objects are not supported.
 - Fixed a potential OpenGL error if transform feedback buffers are not supported.

## Version 0.6.2

 - Added `is_context_lost`, `is_robust` and `is_context_loss_possible` methods to `Context` (callable through the `Display` as well).
 - Fixed using a framebuffer with a depth or stencil attachment causing the wrong texture to be displayed.

## Version 0.6.1

 - Fixed mipmaps generation with sRGB textures.

## Version 0.6.0

 - `Frame::finish` now returns a `Result`. `Frame`'s destructor will panic if `finish` has not been called.
 - `with_compressed_data` and `with_compressed_data_if_supported` now have an additional parameter for mipmaps.
 - All the texture constructors that used to take a boolean as parameter for mipmaps now takes an enum.
 - `empty_with_format` and `empty_with_format_if_supported` are now allowed for compressed textures.
 - `write`, `write_compressed_data`, `write_compressed_data_if_supported` and `read_compressed_data` are now available for mipmap objects.
 - Removed the `is_closed()` function.
 - Removed the deprecated `render_buffer` module.
 - The `Backend::swap_buffers` function must now return a `Result`.

## Version 0.5.6

 - The panic at initialization in case of OpenGL error has been replaced by a warning.

## Version 0.5.5

 - Added `with_compressed_data`, `read_compressed_data` and `write_compressed_data` to compressed texture types.
 - Fixed a panic at initialization on OS/X.

## Version 0.5.4

 - Added the `LineLoop` primitive type.
 - Added the `smooth` draw parameters.
 - Fixed a potential `GL_INVALID_ENUM` error generated at initialization.
 - Glium will now panic if an OpenGL error is triggered during initialization.
 - Fixed gamma correction with OpenGL ES.
 - Fixed `get_internal_format_if_supported()` sometimes panicking.
 - Fixed a panic with a tessellation evaluation shader that outputs quads.

## Version 0.5.3

 - Added support for compute shaders with the `program::ComputeShader` struct.
 - Can now bind a uniform buffer as a shader storage buffer.
 - Added `Program::get_shader_storage_blocks()` to obtain the list of shader storage blocks.
 - The `Attribute` trait is now implemented on types from cgmath.
 - Now caching the actual format of a texture in case it is retrieved multiple times.

## Version 0.5.2

 - Added `vertex::TransformFeedbackSession` and `transform_feedback` to the draw parameters.
 - Added `RenderBufferAny`. Render buffers now deref to `RenderBufferAny`.
 - Deprecated `.into_vertex_buffer_any()` in favor of `.into()`.
 - Added `.get_total_bits()` to `texture::InternalFormat`.
 - Fixed values in uniform blocks being required to implement the `Default` trait.
 - Fixed buffer sometimes not always correctly unbound.

## Version 0.5.1 (2015-05-30)

 - Added `index::DrawCommandsNoIndicesBuffer` for multidraw indirect drawing.
 - Fixed a potential panic when using a buffer.

## Version 0.5.0 (2015-05-27)

 - `IndexBuffer` now takes the type of indices as template parameter.
 - `IndexBuffer` now derefs to `BufferView`. Allows modifying the index buffer after it has been created.
 - Added `IndexBufferAny`.
 - Removed the `ToIndicesSource` and `IntoIndexBuffer` traits. The former is replaced with `Into<IndicesSource>`.
 - `PixelBuffer` now takes the type of pixels as template parameter.
 - Renamed `PixelBuffer::read` to `PixelBuffer::read_as_texture_2d`.
 - `PixelBuffer` now derefs to `BufferView`.
 - Added `BufferView::read_as_texture_1d` and `BufferView::read_as_texture_1d_if_supported`.
 - Reworked `TextureDataSink` traits to take a precise format.
 - Fixed a panic when destroying a buffer with persistent mapping.
 - Removed deprecated function `VertexBuffer::new_dynamic`.
 - It is now safe to call `mem::forget` on a `Mapping` object.

## Version 0.4.2 (2015-05-25)

 - Removed the `buffer::Builder` type as it was proven unsound.
 - Renamed `SubBuffer` to `BufferView`.
 - `Display`/`GlutinFacade` now derefs to `Context`.
 - Mapping a buffer now simply calls `glMapBuffer` again, instead of writing to a temporary buffer.
 - `glutin` is now an optional dependency (enabled by default).
 - Creating an index buffer now correctly uses a `GL_ELEMENT_ARRAY_BUFFER`.

## Version 0.4.1 (2015-05-22)

 - Added a `buffer::Builder` type to build multiple sub-buffers within the same buffer.
 - Added an `invalidate` method to buffers.
 - Updated glutin to 0.1.6.

## Version 0.4.0 (2015-05-17)

 - Removed support for using indices in RAM.
 - `IndexBuffer`, `VertexBuffer` and `UniformBuffer` now deref to `SubBuffer`/`SubBufferAny`.
 - Added a `get_internal_format_if_supported` method to textures.
 - Replaced the `IntoProgramCreationInput` trait with `Into<ProgramCreationInput>`.
 - The `VertexFormat` type is now a `Cow<'static, []>` instead of a `Vec`.
 - Updated cgmath dependency to version 0.2.

## Version 0.3.7 (2015-05-12)

 - Added `AnySamplesPassedQuery`, `PrimitivesGeneratedQuery` and `TransformFeedbackPrimitivesWrittenQuery`, and corresponding fields in `DrawParameters`.
 - The `samples_passed_query` draw parameter can now also take a `AnySamplesPassedQuery`.
 - Added a `condition` parameter to the draw parameters, allowing you to use conditional rendering.
 - Textures now have a `sampled()` method to make it easier to create a `Sampler`.
 - Added a `color_mask` member to the draw parameters.
 - Added `per_instance` and `per_instance_if_supported` to `VertexBufferAny`.

## Version 0.3.6 (2015-05-09)

 - Added `SamplesPassedQuery` and `TimeElapsedQuery` types. They can be passed to the draw parameters.
 - Buffers are no longer mapped with `GL_MAP_COHERENT_BIT`. Flushing is handled by glium.
 - Changed `Surface::clear` to take an additional optional `Rect` parameter that specifies the rectangle to clear.
 - Fixed the `program!` macro not usable with version numbers >= 256.
 - Added support for `GL_OES_depth_texture` and `GL_OES_packed_depth_stencil`.
 - Moved the content of the `render_buffer` module to `framebuffer`. `render_buffer` still exists but is deprecated.

## Version 0.3.5 (2015-05-02)

 - Glium now reexports glutin. You can access glutin with `glium::glutin`.
 - Fixed trying to retrieve uniform blocks on OpenGL ES 2.

## Version 0.3.4 (2015-04-28)

 - Added caching some uniform values in the `Program` struct to avoid calls to `glUniform`.
 - `VertexBuffer::dynamic` and `write` can now take a  `&[T]` as well as a `Vec<T>`.
 - `assert_no_error` now takes an optional user-defined string.
 - Fixed triggering an OpenGL error on initialization with non-compatibility contexts.
 - Added a better texture units assignment system when drawing, in order to avoid some redundant state changes.

## Version 0.3.3 (2015-04-24)

 - Removed the `gl_persistent_mapping` feature.
 - Creating a dynamic buffer now creates a persistent mapped buffer automatically if supported.
 - Creating a non-dynamic buffer now creates an immutable buffer. Modifying such a buffer is still possible but very expensive.
 - Deprecated the `new_dynamic` function in favor of `dynamic`.
 - Fixed zero-sized textures triggering OpenGL errors.
 - Added the possibility to add a debug string in the OpenGL commands queue.

## Version 0.3.2 (2015-04-23)

 - Added `vertex::EmptyVertexAttributes` and `vertex::EmptyInstanceAttributes` markers in order to draw without a vertex source.
 - Added more formats in `CompressedFormats` and `CompressedSrgbFormats`.
 - Fixed the `Mapping` objects not implementing `Sync`.
 - Fixed rendering to an sRGB texture not possible.
 - `GliumCreationError` now has a template parameter indicating the backend creation error type.
 - The `DisplayBuild` trait has a new associated type indicating the error type.
 - Fixed the debug output callback not being disabled when compiling with --release.

## Version 0.3.1 (2015-04-18)

 - Fixed lifetime-related issues when using the `uniform!` macro.

## Version 0.3.0 (2015-04-16)

 - Changed the `slice()` functions to take a `Range` instead of two parameters.
 - Added `SrgbTexture` and `CompressedSrgbTexture` types.
 - Added `SrgbFormat` and `CompressedSrgbFormat` enums.
 - `GL_FRAMEBUFFER_SRGB` is now enabled by default.

## Version 0.2.3 (2015-04-14)

 - Added a `program!` macro which builds a program. Glium chooses the right shaders depending on what the backend supports.
 - Added a `VertexBuffer::empty` method that creates a vertex buffer with uninitialized data.
 - Fixed drawing with offsets in vertex buffers different than 0 not permitted.
 - Changed transform feedback reflection API to be compatible with what OpenGL 4.4 or ARB_enhanced_layouts allow.
 - `VertexBuffer::new` can now take a slice as parameter.
 - Revert the fix for sRGB. `GL_FRAMEBUFFER_SRGB` is no longer enabled.

## Version 0.2.2 (2015-04-10)

 - Added support for backends that don't have vertex array objects (like OpenGL ES 2/WebGL).
 - Glium now has basic support for OpenGL ES 2/WebGL.
 - Added stencil operations in `DrawParameters`.
 - Fixed `GL_FRAMEBUFFER_SRGB` not being enabled, leading to different brightness depending on the target.
 - Fixed trailing commas not working in `implement_vertex!` and `uniform!`.

## Version 0.2.1 (2015-04-03)

 - Creating a texture with a specific format now properly checks for available extensions.

## Version 0.2.0 (2015-03-30)

 - Removed `PerInstanceAttributesBuffer` and `PerInstanceAttributesBufferAny`.
 - Added `per_instance` and `per_instance_if_supported` to `VertexBuffer`.
 - Removed the deprecated `index_buffer` module. Use the `index` module instead.
 - Fixed viewport dimensions on retina screens.
 - The `Backend` trait is now marked unsafe.

## Version 0.1.3 (2015-03-24) & 0.1.4 (2015-03-26)

 - Added the `Backend` and `Facade` traits. `Display` implements the `Facade` trait.
 - Changed all buffer/texture/etc. creation functions to take any type that implements `Facade` instead of a `Display`.
 - Added `GlutinWindowBackend` and `GlutinHeadlessBackend` that implement the `Backend` trait.
 - Changed the private `Context` struct to be public. This allows users to implement the `Facade` trait themselves.
 - Added an associated type to the `DisplayBuild` trait.
 - Fixed scissor boxing not being disabled before a blit.

## Version 0.1.2 (2015-03-20)

 - Fixed a memory leak with vertex array objects.
 - Fixed an issue where you couldn't reuse the same uniform values created with `uniform!` multiple times.

## Version 0.1.1 (2015-03-13)

 - Added `ToColorAttachment` trait implementation for `Texture2dMultisample`.
 - Added `Texture2dMultisample::as_surface` method.
 - Updated the crate for the new I/O.
 - Changed `VertexFormat` to take a `Cow<'static, str>` instead of a `String`.
 - Fixed a stack overflow in release mode.
 - Removed the `fence` argument from vertices, indices and uniforms sources. Fences are now directly gathered from buffers when drawing.