Browse Source

Merge branch 'master' into compatibility

Vladimír Vondruš 13 years ago
parent
commit
6bd22d5cca
  1. 11
      src/MeshTools/FullScreenTriangle.cpp
  2. 6
      src/MeshTools/FullScreenTriangle.h

11
src/MeshTools/FullScreenTriangle.cpp

@ -32,25 +32,28 @@
namespace Magnum { namespace MeshTools { namespace Magnum { namespace MeshTools {
std::pair<Buffer, Mesh> fullScreenTriangle() { std::pair<Buffer*, Mesh> fullScreenTriangle() {
Mesh mesh; Mesh mesh;
mesh.setPrimitive(Mesh::Primitive::Triangles) mesh.setPrimitive(Mesh::Primitive::Triangles)
.setVertexCount(3); .setVertexCount(3);
Buffer buffer; Buffer* buffer = nullptr;
#ifndef MAGNUM_TARGET_GLES #ifndef MAGNUM_TARGET_GLES
if(!Context::current()->isVersionSupported(Version::GL300)) if(!Context::current()->isVersionSupported(Version::GL300))
#else #else
if(!Context::current()->isVersionSupported(Version::GLES300)) if(!Context::current()->isVersionSupported(Version::GLES300))
#endif #endif
{ {
buffer = new Buffer;
constexpr Vector2 triangle[] = { constexpr Vector2 triangle[] = {
Vector2(-1.0, 1.0), Vector2(-1.0, 1.0),
Vector2(-1.0, -3.0), Vector2(-1.0, -3.0),
Vector2( 3.0, 1.0) Vector2( 3.0, 1.0)
}; };
buffer.setData(triangle, Buffer::Usage::StaticDraw); buffer->setData(triangle, Buffer::Usage::StaticDraw);
mesh.addVertexBuffer(buffer, 0, AbstractShaderProgram::Attribute<0, Vector2>()); /** @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, AbstractShaderProgram::Attribute<0, Vector2>());
} }
return {std::move(buffer), std::move(mesh)}; return {std::move(buffer), std::move(mesh)};

6
src/MeshTools/FullScreenTriangle.h

@ -52,8 +52,8 @@ computed from them. The vertex positions are, in order:
On OpenGL 2.1 and OpenGL ES 2.0 the vertex positions are passed explicitly as On OpenGL 2.1 and OpenGL ES 2.0 the vertex positions are passed explicitly as
attribute `0`, contained in the buffer. On OpenGL 3.0+ and OpenGL ES 3.0+ the attribute `0`, contained in the buffer. On OpenGL 3.0+ and OpenGL ES 3.0+ the
mesh is attribute-less and the vertex positions can be computed using mesh is attribute-less and the vertex positions can be computed using
`gl_VertexID` builtin shader variable, thus the returned vertex buffer is empty `gl_VertexID` builtin shader variable, thus `nullptr` is returned instead of
and basically useless. vertex buffer.
Computing positions in vertex shader in a portable way might be done like this. Computing positions in vertex shader in a portable way might be done like this.
For OpenGL 2.1 and OpenGL ES 2.0 you then need to bind the location of `position` For OpenGL 2.1 and OpenGL ES 2.0 you then need to bind the location of `position`
@ -80,7 +80,7 @@ void main() {
@attention The implementation needs to check OpenGL version, so it expects @attention The implementation needs to check OpenGL version, so it expects
active context. active context.
*/ */
std::pair<Buffer, Mesh> MAGNUM_MESHTOOLS_EXPORT fullScreenTriangle(); std::pair<Buffer*, Mesh> MAGNUM_MESHTOOLS_EXPORT fullScreenTriangle();
}} }}

Loading…
Cancel
Save