Browse Source

MeshTools: return just a mesh from fullScreenTriangle().

Backwards-incompatible change, sorry.
pull/374/head
Vladimír Vondruš 7 years ago
parent
commit
f7dcb62e93
  1. 4
      doc/changelog.dox
  2. 17
      src/Magnum/MeshTools/FullScreenTriangle.cpp
  3. 7
      src/Magnum/MeshTools/FullScreenTriangle.h

4
doc/changelog.dox

@ -186,6 +186,10 @@ See also:
@subsection changelog-latest-compatibility Potential compatibility breakages, removed APIs
- The @ref MeshTools::fullScreenTriangle() function now returns just a
@ref GL::Mesh instead of @ref std::pair of a mesh and a buffer, as the
buffer is now owned by the mesh. This change was not possible to be done in
a backwards-compatible way.
- Removed deprecated implicit conversion @ref Corrade::Containers::Optional
to @cpp std::optional @ce, deprecated in January 2018. The class now
contains an *explicit* and opt-in STL compatibility, see its documentation

17
src/Magnum/MeshTools/FullScreenTriangle.cpp

@ -34,34 +34,31 @@
namespace Magnum { namespace MeshTools {
std::pair<std::unique_ptr<GL::Buffer>, GL::Mesh> fullScreenTriangle(GL::Version version) {
GL::Mesh fullScreenTriangle(const GL::Version version) {
GL::Mesh mesh;
mesh.setPrimitive(GL::MeshPrimitive::Triangles)
.setCount(3);
std::unique_ptr<GL::Buffer> buffer;
#ifndef MAGNUM_TARGET_GLES
if(version < GL::Version::GL300)
#else
if(version < GL::Version::GLES300)
#endif
{
buffer.reset(new GL::Buffer);
constexpr Vector2 triangle[] = {
constexpr Vector2 triangle[]{
{-1.0f, 1.0f},
{-1.0f, -3.0f},
{ 3.0f, 1.0f}
};
buffer->setData(triangle, GL::BufferUsage::StaticDraw);
/** @todo Is it possible to attach moveable buffer here to avoid heap
allocation? OTOH this is more effective in most (modern) cases */
mesh.addVertexBuffer(*buffer, 0, GL::Attribute<0, Vector2>{});
GL::Buffer buffer{GL::Buffer::TargetHint::Array};
buffer.setData(triangle, GL::BufferUsage::StaticDraw);
mesh.addVertexBuffer(std::move(buffer), 0, GL::Attribute<0, Vector2>{});
}
return {std::move(buffer), std::move(mesh)};
return mesh;
}
std::pair<std::unique_ptr<GL::Buffer>, GL::Mesh> fullScreenTriangle() {
GL::Mesh fullScreenTriangle() {
return fullScreenTriangle(GL::Context::current().version());
}

7
src/Magnum/MeshTools/FullScreenTriangle.h

@ -34,9 +34,6 @@
#include "Magnum/configure.h"
#ifdef MAGNUM_TARGET_GL
#include <memory>
#include <utility>
#include "Magnum/GL/GL.h"
#include "Magnum/MeshTools/visibility.h"
@ -89,7 +86,7 @@ void main() {
@ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features
for more information.
*/
std::pair<std::unique_ptr<GL::Buffer>, GL::Mesh> MAGNUM_MESHTOOLS_EXPORT fullScreenTriangle(GL::Version version);
GL::Mesh MAGNUM_MESHTOOLS_EXPORT fullScreenTriangle(GL::Version version);
/** @overload
@ -99,7 +96,7 @@ This function implicitly uses current context version.
@ref MAGNUM_TARGET_GL enabled (done by default). See @ref building-features
for more information.
*/
std::pair<std::unique_ptr<GL::Buffer>, GL::Mesh> MAGNUM_MESHTOOLS_EXPORT fullScreenTriangle();
GL::Mesh MAGNUM_MESHTOOLS_EXPORT fullScreenTriangle();
#else
#error this header is available only in the OpenGL build
#endif

Loading…
Cancel
Save