Change Log
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.
- Depth comparison and shadow mapping (#1679).
Version 0.23.0 (2018-12-05)
- Updated glutin to version 0.19. See the glutin release notes here.
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
IntoVerticesSourcetrait withInto<VerticesSource>. - Fixed rendering bug on high-DPI screens.
- Added support for clipping via
gl_ClipDistance. - Enabled depth-stencil FBO attachments.
Version 0.19.0 (2017-12-11)
- Updated glutin to version 0.11. Notably includes the winit 0.9 update.
- 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
Contextto retrieve information (like the content ofGL_VENDORorGL_RENDERERfor example). - Added additional dimensions getters to the various texture types.
Version 0.13.3 (2016-01-08)
- Added constructors to
SimpleFrameBufferfor 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_buffernow 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_imagefrom texture types where they are not relevant. - The
Backend::get_proc_addressfunction now takes a*const std::os::raw::c_voidinstead 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_buffertoTextureAnyImage, which allows you to clear the content of any texture. - Added
TextureAny::from_idto 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_stencilandwith_depth_and_stencil. - Implemented the
ToColorAttachmenttrait for unsigned and integral textures. - Implemented the
ToXAttachmenttraits for theXAttachmenttypes. - It is now possible to use another format than
(u8, u8, u8, u8)withraw_readon 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_addressfunction now takes a*const ()instead of a*const libc::c_void. - Creating a
MultiOutputFrameBuffernow requires passing an iterator instead of aVec. - When checking a uniform block's layout,
[f32; 4]now matches bothvec4andfloat[4]instead of justvec4before. Same for all other arrays between 1 and 4 elements. UniformBlockis 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
glBufferDatabeing called to invalidate a buffer created withglBufferStorage. - Changed use of
Rangein buffer slice toRangeArgument.
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_debugandbuild_glium_unchecked_debugto set the behavior of the debug callback at initialization. - Rename
ClockWisetoClockwise. - The
program!macro now returns aProgramChooserCreationErrorand no longer panics if no version is found. - Remove the
Texturetrait. All of its methods are already implemented on all texture types already. - Rename
UniformBlock::bindingtoidand addinitial_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_renderableto the color image formats. - Fixed glium erroneously using a SSBO's and a uniform buffer's binding point instead of index.
- Fixed
glInvalidateBuffer(Sub)Databeing called for persistent-mapped buffers.
Version 0.9.1 (2015-09-30)
- Add
ComputeShader::execute_indirect. - Add support for 64bits integer uniforms.
copy_tonow takes aInto<BufferSlice>instead of aBufferSlice.- Glium no longer calls
glBlendColorif 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,DepthandStencil. SimpleFrameBufferandMultiOutputFrameBuffer's constructors now return aResult.- Creating a renderbuffer now returns a
Result. - Add support for empty framebuffers with the
EmptyFrameBuffertype. - 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
DrawParametersBuilderstruct. - Add
clear_color_srgband derivates. Theclearmethod has an additionalcolor_srgb: boolparameter. - Added some state changes when swapping buffers to adapt to the FRAPS software.
- Removed
StencilTexture3dare 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
f64uniforms.
Version 0.8.6 (2015-08-26)
- Renamed
BufferViewtoBuffer.BufferViewstill exists for backward compatibility. - Add a
copy_tomethod to buffers. - Add support for the
GL_OES_element_index_uintextension. - Fixed OpenGL ES 3.2 not working.
- Add support for
IntVec{2|3|4}andUnsignedIntVec{2|3|4}uniform types. - Add a work-around for Radeon drivers crashing with 32+ texture units.
- Add support for
booleanuniforms. - 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.
DrawParametersno longer implementsCopy.- 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_shaderGL_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_*_supportedfunctions in thetexturemodule to check whether a texture type is supported.
Version 0.8.4 (2015-08-10)
- Added
#[inline]attributes on many functions. - Added
slice_customandslice_custom_mutto buffers, which allow you to get slices over anything inside the buffer. - Added
Query::to_buffer_u32to write the result of a query to a buffer. - Added
is_supportedfunctions for all the texture and renderbuffer formats. - Added missing
I16I16I16I16andU16U16U16float formats. RenamedU3U32UtoU3U3U2. - Various fixes and improvements when determining whether a format is supported.
- Changed the
framebuffer::To*Attachmenttraits with a lifetime parameter, and to take by value instead of by reference. - The
framebuffer::To*Attachmenttraits are now implemented onTextureLayerMipmapstructs. - Fixed
.layer()function returningNonewhen it shouldn't. - GLSL ES 3.2 is now recognized.
Version 0.8.3 (2015-08-04)
- Textures are now inside submodules (for example
Texture2dis intexture::texture2d::Texture2d) and reexported fromtexture. - Added
Context::flush()andContext::finish(). DeprecatedContext::synchronize. - Removed
Sizedconstraint forSurfacethat was preventing one from using&Surfaceor&mut Surface. - Added
TextureAnyMipmap::raw_upload_from_pixel_buffer. - Moved the
pixel_buffermodule totexture::pixel_buffer(the old module still exists for backward compatibility).
Version 0.8.2 (2015-07-29)
- Added a
buffer_texturemodule intexture. - Added
DrawParameters::depth_clampandDrawError::DepthClampNotSupported.
Version 0.8.1 (2015-07-27)
- Added
DrawParameters::ProvokingVertexandDrawError::ProvokingVertexNotSupported. - Added
DrawError::RasterizerDiscardNotSupported. DrawParametersBuilderis now deprecated.ProgramCreationInputnow has aoutputs_srgbmember.- Fixed a bug with offsets of members in arrays.
- Added support for the
GL_EXT_geometry_shaderOpenGL ES extension.
Version 0.8.0 (2015-07-19)
- Removed all Cargo features related to OpenGL compatibility.
- Replaced all
new_if_supportedorempty_if_supportedfunctions withneworemptyand a proper error type. - All
newandemptyconstructors now return an error if the operation is not supported. VertexBufferandIndexBufferconstructors now take a&[T].- Updated glutin to version 0.3.
BufferView's constructors now take aBufferMode.- Replaced
readandread_if_supportedwithreadthat returns aReadError. - Added
buffer::is_buffer_read_supported. - Removed the deprecated
new_emptyfunction from textures. - Reworked
TextureCreationErrorand removedTextureMaybeSupportedCreationError. newanddynamicare 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*BaseVertexif it is supported. - Added the
CapabilitiesSourcetrait implemented automatically on all types that implementFacade. - Added
is_supportedtoIndexType,Index,PrimitiveType,AttributeandAttributeType. - Added
ComputeShader::is_supported,program::is_geometry_shader_supportedandprogram::is_tessellation_shader_supported. - The
implement_buffer_content!andimplement_block_layout!macros can now take a struct with a lifetime parameter by passingFoo<'a>instead ofFoo.
Version 0.7.0 (2015-07-08)
- Buffers now contain a single, possibly unsized, element.
BufferView<T>is nowBufferView<[T]>. - Creating an empty
BufferView<[T]>now requires callingempty_arrayinstead ofempty. BufferView::writenow takes a&Tinstead of aP where P: AsRef<[T]>. This means that you can no longer passVecs by value for example.- Removed the mock methods from
UniformBufferas they are available through theDereftoBufferView. - The
UniformBlocktrait is now implemented onDrawCommandNoIndicesandDrawCommandIndices. - Added the
implement_buffer_content!macro to put on unsized struct so that you can put them inside buffers. - Added a
uniforms::LayoutMismatchErroras an additional field toDrawError::UniformBlockLayoutMismatch. - Changed
UniformBlock::matchesto return aResult<(), UniformBlockLayoutMismatch>. - Removed the
matchesfunction from theAsUniformValuetrait. - Removed
TextureSurfacein favor ofSimpleFrameBuffer.
Version 0.6.7 (2015-07-06)
- Added
DrawCommandsIndicesBufferfor multidraw elements indirect. - Added
ResidentTexture,TextureHandleandTexture::resident_if_supported()for bindless textures. - Buffers no longer require their content to be
Sendor'static(except for types with theAnysuffix). - Renamed
texture::TextureTypetoDimensions. - Added
Context::get_opengl_version()and deprecatedget_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_writebeing ignored ifdepth_testwasOverwrite.
Version 0.6.5 (2015-06-29)
- Renamed and changed
UniformBlockMembertoBlockLayout. - Added
map_read()andmap_write()to buffers. - Various bugfixes related to queries.
- Added a
implement_uniform_block!macro for uniform buffers and SSBOs similar toimplement_vertex!. - Added
UniformBuffer::emptyandUniformBuffer::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_SYNCextension if OpenGL ES 3.0 is not available. - Now using the
GL_EXT_buffer_storageextension on OpenGL ES if it is available. - Slightly improved performances when using a dynamic buffer.
- Added
GL_PROGRAM_POINT_SIZEsupport toProgram.
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_robustandis_context_loss_possiblemethods toContext(callable through theDisplayas 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::finishnow returns aResult.Frame's destructor will panic iffinishhas not been called.with_compressed_dataandwith_compressed_data_if_supportednow 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_formatandempty_with_format_if_supportedare now allowed for compressed textures.write,write_compressed_data,write_compressed_data_if_supportedandread_compressed_dataare now available for mipmap objects.- Removed the
is_closed()function. - Removed the deprecated
render_buffermodule. - The
Backend::swap_buffersfunction must now return aResult.
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_dataandwrite_compressed_datato compressed texture types. - Fixed a panic at initialization on OS/X.
Version 0.5.4
- Added the
LineLoopprimitive type. - Added the
smoothdraw parameters. - Fixed a potential
GL_INVALID_ENUMerror 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::ComputeShaderstruct. - 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
Attributetrait 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::TransformFeedbackSessionandtransform_feedbackto the draw parameters. - Added
RenderBufferAny. Render buffers now deref toRenderBufferAny. - Deprecated
.into_vertex_buffer_any()in favor of.into(). - Added
.get_total_bits()totexture::InternalFormat. - Fixed values in uniform blocks being required to implement the
Defaulttrait. - Fixed buffer sometimes not always correctly unbound.
Version 0.5.1 (2015-05-30)
- Added
index::DrawCommandsNoIndicesBufferfor multidraw indirect drawing. - Fixed a potential panic when using a buffer.
Version 0.5.0 (2015-05-27)
IndexBuffernow takes the type of indices as template parameter.IndexBuffernow derefs toBufferView. Allows modifying the index buffer after it has been created.- Added
IndexBufferAny. - Removed the
ToIndicesSourceandIntoIndexBuffertraits. The former is replaced withInto<IndicesSource>. PixelBuffernow takes the type of pixels as template parameter.- Renamed
PixelBuffer::readtoPixelBuffer::read_as_texture_2d. PixelBuffernow derefs toBufferView.- Added
BufferView::read_as_texture_1dandBufferView::read_as_texture_1d_if_supported. - Reworked
TextureDataSinktraits 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::forgeton aMappingobject.
Version 0.4.2 (2015-05-25)
- Removed the
buffer::Buildertype as it was proven unsound. - Renamed
SubBuffertoBufferView. Display/GlutinFacadenow derefs toContext.- Mapping a buffer now simply calls
glMapBufferagain, instead of writing to a temporary buffer. glutinis 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::Buildertype to build multiple sub-buffers within the same buffer. - Added an
invalidatemethod to buffers. - Updated glutin to 0.1.6.
Version 0.4.0 (2015-05-17)
- Removed support for using indices in RAM.
IndexBuffer,VertexBufferandUniformBuffernow deref toSubBuffer/SubBufferAny.- Added a
get_internal_format_if_supportedmethod to textures. - Replaced the
IntoProgramCreationInputtrait withInto<ProgramCreationInput>. - The
VertexFormattype is now aCow<'static, []>instead of aVec. - Updated cgmath dependency to version 0.2.
Version 0.3.7 (2015-05-12)
- Added
AnySamplesPassedQuery,PrimitivesGeneratedQueryandTransformFeedbackPrimitivesWrittenQuery, and corresponding fields inDrawParameters. - The
samples_passed_querydraw parameter can now also take aAnySamplesPassedQuery. - Added a
conditionparameter to the draw parameters, allowing you to use conditional rendering. - Textures now have a
sampled()method to make it easier to create aSampler. - Added a
color_maskmember to the draw parameters. - Added
per_instanceandper_instance_if_supportedtoVertexBufferAny.
Version 0.3.6 (2015-05-09)
- Added
SamplesPassedQueryandTimeElapsedQuerytypes. 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::clearto take an additional optionalRectparameter that specifies the rectangle to clear. - Fixed the
program!macro not usable with version numbers >= 256. - Added support for
GL_OES_depth_textureandGL_OES_packed_depth_stencil. - Moved the content of the
render_buffermodule toframebuffer.render_bufferstill 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
Programstruct to avoid calls toglUniform. VertexBuffer::dynamicandwritecan now take a&[T]as well as aVec<T>.assert_no_errornow 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_mappingfeature. - 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_dynamicfunction in favor ofdynamic. - 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::EmptyVertexAttributesandvertex::EmptyInstanceAttributesmarkers in order to draw without a vertex source. - Added more formats in
CompressedFormatsandCompressedSrgbFormats. - Fixed the
Mappingobjects not implementingSync. - Fixed rendering to an sRGB texture not possible.
GliumCreationErrornow has a template parameter indicating the backend creation error type.- The
DisplayBuildtrait 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 aRangeinstead of two parameters. - Added
SrgbTextureandCompressedSrgbTexturetypes. - Added
SrgbFormatandCompressedSrgbFormatenums. GL_FRAMEBUFFER_SRGBis 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::emptymethod 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::newcan now take a slice as parameter.- Revert the fix for sRGB.
GL_FRAMEBUFFER_SRGBis 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_SRGBnot being enabled, leading to different brightness depending on the target. - Fixed trailing commas not working in
implement_vertex!anduniform!.
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
PerInstanceAttributesBufferandPerInstanceAttributesBufferAny. - Added
per_instanceandper_instance_if_supportedtoVertexBuffer. - Removed the deprecated
index_buffermodule. Use theindexmodule instead. - Fixed viewport dimensions on retina screens.
- The
Backendtrait is now marked unsafe.
Version 0.1.3 (2015-03-24) & 0.1.4 (2015-03-26)
- Added the
BackendandFacadetraits.Displayimplements theFacadetrait. - Changed all buffer/texture/etc. creation functions to take any type that implements
Facadeinstead of aDisplay. - Added
GlutinWindowBackendandGlutinHeadlessBackendthat implement theBackendtrait. - Changed the private
Contextstruct to be public. This allows users to implement theFacadetrait themselves. - Added an associated type to the
DisplayBuildtrait. - 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
ToColorAttachmenttrait implementation forTexture2dMultisample. - Added
Texture2dMultisample::as_surfacemethod. - Updated the crate for the new I/O.
- Changed
VertexFormatto take aCow<'static, str>instead of aString. - Fixed a stack overflow in release mode.
- Removed the
fenceargument from vertices, indices and uniforms sources. Fences are now directly gathered from buffers when drawing.