Browse Source

GL,Text: verify buffer contents on GLES3

gltestlib-symbol-duplication
Pablo Escobar 4 years ago committed by Vladimír Vondruš
parent
commit
8090013e0a
  1. 53
      src/Magnum/GL/Test/BufferGLTest.cpp
  2. 112
      src/Magnum/GL/Test/BufferImageGLTest.cpp
  3. 16
      src/Magnum/GL/Test/CMakeLists.txt
  4. 10
      src/Magnum/GL/Test/FramebufferGLTest.cpp
  5. 77
      src/Magnum/GL/Test/TransformFeedbackGLTest.cpp
  6. 3
      src/Magnum/Text/Test/CMakeLists.txt
  7. 35
      src/Magnum/Text/Test/RendererGLTest.cpp

53
src/Magnum/GL/Test/BufferGLTest.cpp

@ -34,6 +34,10 @@
#include "Magnum/GL/Extensions.h"
#include "Magnum/GL/OpenGLTester.h"
#ifndef MAGNUM_TARGET_GLES2
#include "Magnum/DebugTools/BufferData.h"
#endif
#ifndef MAGNUM_TARGET_WEBGL
#include <Corrade/Containers/String.h>
#endif
@ -138,15 +142,14 @@ void BufferGLTest::constructFromData() {
CORRADE_COMPARE(c.size(), 5*4);
CORRADE_COMPARE(d.size(), 5*4);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(a.data()),
#ifndef MAGNUM_TARGET_GLES2
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(DebugTools::bufferData(a)),
Containers::arrayView(data),
TestSuite::Compare::Container);
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(b.data()),
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(DebugTools::bufferData(b)),
Containers::arrayView(data),
TestSuite::Compare::Container);
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(c.data()),
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(DebugTools::bufferData(c)),
Containers::arrayView(data),
TestSuite::Compare::Container);
/* d's data is undefined, not testing */
@ -307,10 +310,9 @@ void BufferGLTest::data() {
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(buffer.size(), 5*4);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(buffer.data()),
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(DebugTools::bufferData(buffer)),
Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -320,10 +322,9 @@ void BufferGLTest::data() {
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(buffer.size(), 5*4);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(buffer.data()),
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(DebugTools::bufferData(buffer)),
Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -334,10 +335,9 @@ void BufferGLTest::data() {
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(buffer.size(), 5*4);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(buffer.subData(4, 3*4)),
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(DebugTools::bufferSubData(buffer, 4, 3*4)),
Containers::arrayView(subData),
TestSuite::Compare::Container);
#endif
@ -347,10 +347,9 @@ void BufferGLTest::data() {
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(buffer.size(), 5*4);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(buffer.subData(4, 3*4)),
CORRADE_COMPARE_AS(Containers::arrayCast<Int>(DebugTools::bufferSubData(buffer, 4, 3*4)),
Containers::arrayView(subData),
TestSuite::Compare::Container);
#endif
@ -385,9 +384,8 @@ void BufferGLTest::map() {
CORRADE_VERIFY(buffer.unmap());
MAGNUM_VERIFY_NO_GL_ERROR();
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
Containers::Array<char> changedContents = buffer.data();
#ifndef MAGNUM_TARGET_GLES2
Containers::Array<char> changedContents = DebugTools::bufferData(buffer);
CORRADE_COMPARE(changedContents.size(), 5);
CORRADE_COMPARE(changedContents[3], 107);
#endif
@ -417,9 +415,8 @@ void BufferGLTest::mapRange() {
CORRADE_VERIFY(buffer.unmap());
MAGNUM_VERIFY_NO_GL_ERROR();
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
Containers::Array<char> changedContents = buffer.data();
#ifndef MAGNUM_TARGET_GLES2
Containers::Array<char> changedContents = DebugTools::bufferData(buffer);
CORRADE_COMPARE(changedContents.size(), 5);
CORRADE_COMPARE(changedContents[4], 107);
#endif
@ -457,9 +454,8 @@ void BufferGLTest::mapRangeExplicitFlush() {
MAGNUM_VERIFY_NO_GL_ERROR();
/* Flushed range should be changed */
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
Containers::Array<char> changedContents = buffer.data();
#ifndef MAGNUM_TARGET_GLES2
Containers::Array<char> changedContents = DebugTools::bufferData(buffer);
CORRADE_COMPARE(changedContents.size(), 5);
CORRADE_COMPARE(changedContents[4], 107);
#endif
@ -478,9 +474,8 @@ void BufferGLTest::copy() {
Buffer::copy(buffer1, buffer2, 1, 2, 3);
MAGNUM_VERIFY_NO_GL_ERROR();
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
const Containers::Array<char> subContents = buffer2.subData(2, 3);
#ifndef MAGNUM_TARGET_GLES2
const Containers::Array<char> subContents = DebugTools::bufferSubData(buffer2, 2, 3);
CORRADE_COMPARE_AS(subContents, Containers::arrayView(data).slice(1, 4),
TestSuite::Compare::Container);
#endif

112
src/Magnum/GL/Test/BufferImageGLTest.cpp

@ -33,6 +33,10 @@
#include "Magnum/GL/PixelFormat.h"
#include "Magnum/GL/OpenGLTester.h"
#ifndef MAGNUM_TARGET_GLES2
#include "Magnum/DebugTools/BufferData.h"
#endif
namespace Magnum { namespace GL { namespace Test { namespace {
struct BufferImageGLTest: OpenGLTester {
@ -98,10 +102,6 @@ void BufferImageGLTest::construct() {
BufferImage2D a{PixelStorage{}.setAlignment(1),
PixelFormat::Red, PixelType::UnsignedByte, {1, 3}, data, BufferUsage::StaticDraw};
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(a.storage().alignment(), 1);
@ -110,8 +110,9 @@ void BufferImageGLTest::construct() {
CORRADE_COMPARE(a.size(), Vector2i(1, 3));
CORRADE_COMPARE(a.dataSize(), 3);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -122,10 +123,6 @@ void BufferImageGLTest::constructGeneric() {
BufferImage2D a{PixelStorage{}.setAlignment(1),
Magnum::PixelFormat::R8Unorm, {1, 3}, data, BufferUsage::StaticDraw};
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(a.storage().alignment(), 1);
@ -134,8 +131,9 @@ void BufferImageGLTest::constructGeneric() {
CORRADE_COMPARE(a.size(), Vector2i(1, 3));
CORRADE_COMPARE(a.dataSize(), 3);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -150,10 +148,6 @@ void BufferImageGLTest::constructCompressed() {
CompressedPixelFormat::RGBAS3tcDxt1,
{4, 4}, data, BufferUsage::StaticDraw};
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
#ifndef MAGNUM_TARGET_GLES
@ -163,8 +157,9 @@ void BufferImageGLTest::constructCompressed() {
CORRADE_COMPARE(a.size(), Vector2i(4, 4));
CORRADE_COMPARE(a.dataSize(), 8);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -179,10 +174,6 @@ void BufferImageGLTest::constructCompressedGeneric() {
Magnum::CompressedPixelFormat::Bc1RGBAUnorm,
{4, 4}, data, BufferUsage::StaticDraw};
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
#ifndef MAGNUM_TARGET_GLES
@ -192,8 +183,9 @@ void BufferImageGLTest::constructCompressedGeneric() {
CORRADE_COMPARE(a.size(), Vector2i(4, 4));
CORRADE_COMPARE(a.dataSize(), 8);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -208,10 +200,6 @@ void BufferImageGLTest::constructBuffer() {
BufferImage2D a{PixelStorage{}.setAlignment(1),
PixelFormat::Red, PixelType::UnsignedByte, {1, 3}, std::move(buffer), sizeof(data)};
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_VERIFY(!buffer.id());
@ -222,8 +210,9 @@ void BufferImageGLTest::constructBuffer() {
CORRADE_COMPARE(a.size(), Vector2i(1, 3));
CORRADE_COMPARE(a.dataSize(), 3);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -238,10 +227,6 @@ void BufferImageGLTest::constructBufferGeneric() {
BufferImage2D a{PixelStorage{}.setAlignment(1),
Magnum::PixelFormat::R8Unorm, {1, 3}, std::move(buffer), sizeof(data)};
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_VERIFY(!buffer.id());
@ -252,8 +237,9 @@ void BufferImageGLTest::constructBufferGeneric() {
CORRADE_COMPARE(a.size(), Vector2i(1, 3));
CORRADE_COMPARE(a.dataSize(), 3);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -272,10 +258,6 @@ void BufferImageGLTest::constructBufferCompressed() {
CompressedPixelFormat::RGBAS3tcDxt1,
{4, 4}, std::move(buffer), sizeof(data)};
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
#ifndef MAGNUM_TARGET_GLES
@ -287,8 +269,9 @@ void BufferImageGLTest::constructBufferCompressed() {
CORRADE_COMPARE(a.size(), Vector2i(4, 4));
CORRADE_COMPARE(a.dataSize(), 8);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -307,10 +290,6 @@ void BufferImageGLTest::constructBufferCompressedGeneric() {
Magnum::CompressedPixelFormat::Bc1RGBAUnorm,
{4, 4}, std::move(buffer), sizeof(data)};
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
#ifndef MAGNUM_TARGET_GLES
@ -322,8 +301,9 @@ void BufferImageGLTest::constructBufferCompressedGeneric() {
CORRADE_COMPARE(a.size(), Vector2i(4, 4));
CORRADE_COMPARE(a.dataSize(), 8);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data),
TestSuite::Compare::Container);
#endif
@ -487,10 +467,6 @@ void BufferImageGLTest::setData() {
const UnsignedShort data2[2*4] = { 1, 2, 3, 4, 5, 6, 7, 8 };
a.setData(PixelFormat::RGBA, PixelType::UnsignedShort, {1, 2}, data2, BufferUsage::StaticDraw);
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(a.storage().alignment(), 4);
@ -499,8 +475,9 @@ void BufferImageGLTest::setData() {
CORRADE_COMPARE(a.size(), Vector2i(1, 2));
CORRADE_COMPARE(a.dataSize(), 16);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<UnsignedShort>(imageData),
Containers::arrayView(data2),
TestSuite::Compare::Container);
@ -515,10 +492,6 @@ void BufferImageGLTest::setDataGeneric() {
const UnsignedShort data2[2*4] = { 1, 2, 3, 4, 5, 6, 7, 8 };
a.setData(Magnum::PixelFormat::RGBA16Unorm, {1, 2}, data2, BufferUsage::StaticDraw);
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(a.storage().alignment(), 4);
@ -527,8 +500,9 @@ void BufferImageGLTest::setDataGeneric() {
CORRADE_COMPARE(a.size(), Vector2i(1, 2));
CORRADE_COMPARE(a.dataSize(), 16);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<UnsignedShort>(imageData),
Containers::arrayView(data2),
TestSuite::Compare::Container);
@ -546,10 +520,6 @@ void BufferImageGLTest::setDataCompressed() {
#endif
CompressedPixelFormat::RGBAS3tcDxt3, {8, 4}, data2, BufferUsage::StaticDraw);
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
#ifndef MAGNUM_TARGET_GLES
@ -559,8 +529,9 @@ void BufferImageGLTest::setDataCompressed() {
CORRADE_COMPARE(a.size(), Vector2i(8, 4));
CORRADE_COMPARE(a.dataSize(), 16);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data2),
TestSuite::Compare::Container);
#endif
@ -577,10 +548,6 @@ void BufferImageGLTest::setDataCompressedGeneric() {
#endif
Magnum::CompressedPixelFormat::Bc2RGBAUnorm, {8, 4}, data2, BufferUsage::StaticDraw);
#ifndef MAGNUM_TARGET_GLES
const auto imageData = a.buffer().data();
#endif
MAGNUM_VERIFY_NO_GL_ERROR();
#ifndef MAGNUM_TARGET_GLES
@ -590,8 +557,9 @@ void BufferImageGLTest::setDataCompressedGeneric() {
CORRADE_COMPARE(a.size(), Vector2i(8, 4));
CORRADE_COMPARE(a.dataSize(), 16);
/** @todo How to verify the contents in ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
const auto imageData = DebugTools::bufferData(a.buffer());
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(imageData, Containers::arrayView(data2),
TestSuite::Compare::Container);
#endif

16
src/Magnum/GL/Test/CMakeLists.txt

@ -75,9 +75,7 @@ if(BUILD_GL_TESTS)
find_package(Corrade REQUIRED PluginManager)
corrade_add_test(GLAbstractTextureGLTest AbstractTextureGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib)
corrade_add_test(GLBufferGLTest BufferGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLCubeMapTextureGLTest CubeMapTextureGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib)
corrade_add_test(GLFramebufferGLTest FramebufferGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib)
corrade_add_test(GLMeshGLTest MeshGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib)
corrade_add_test(GLRenderbufferGLTest RenderbufferGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLTextureGLTest TextureGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib)
@ -89,6 +87,16 @@ if(BUILD_GL_TESTS)
${GLAbstractShaderProgramGLTest_RES}
LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLBufferGLTest BufferGLTest.cpp LIBRARIES MagnumOpenGLTester)
if(NOT MAGNUM_TARGET_GLES2)
target_link_libraries(GLBufferGLTest PRIVATE MagnumDebugTools)
endif()
corrade_add_test(GLFramebufferGLTest FramebufferGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib)
if(NOT MAGNUM_TARGET_GLES2)
target_link_libraries(GLFramebufferGLTest PRIVATE MagnumDebugTools)
endif()
corrade_add_test(GLContextGLTest ContextGLTest.cpp LIBRARIES MagnumOpenGLTester)
if(NOT CORRADE_TARGET_EMSCRIPTEN)
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
@ -162,10 +170,10 @@ if(BUILD_GL_TESTS)
endif()
if(NOT MAGNUM_TARGET_GLES2)
corrade_add_test(GLBufferImageGLTest BufferImageGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib)
corrade_add_test(GLBufferImageGLTest BufferImageGLTest.cpp LIBRARIES MagnumOpenGLTesterTestLib MagnumDebugTools)
corrade_add_test(GLPrimitiveQueryGLTest PrimitiveQueryGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLTextureArrayGLTest TextureArrayGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLTransformFeedbackGLTest TransformFeedbackGLTest.cpp LIBRARIES MagnumOpenGLTester)
corrade_add_test(GLTransformFeedbackGLTest TransformFeedbackGLTest.cpp LIBRARIES MagnumOpenGLTester MagnumDebugTools)
endif()
if(NOT MAGNUM_TARGET_GLES2 AND NOT MAGNUM_TARGET_WEBGL)

10
src/Magnum/GL/Test/FramebufferGLTest.cpp

@ -58,6 +58,10 @@
#include "Magnum/GL/RectangleTexture.h"
#endif
#ifndef MAGNUM_TARGET_GLES2
#include "Magnum/DebugTools/BufferData.h"
#endif
namespace Magnum { namespace GL { namespace Test { namespace {
struct FramebufferGLTest: OpenGLTester {
@ -1742,9 +1746,9 @@ void FramebufferGLTest::readBuffer() {
CORRADE_COMPARE(colorImage.size(), Vector2i(8, 16));
MAGNUM_VERIFY_NO_GL_ERROR();
/** @todo How to test this on ES? */
#ifndef MAGNUM_TARGET_GLES
auto colorData = colorImage.buffer().data();
#ifndef MAGNUM_TARGET_GLES2
auto colorData = DebugTools::bufferData(colorImage.buffer());
CORRADE_COMPARE(colorData.size(), (DataOffset + 8*16)*sizeof(Color4ub));
CORRADE_COMPARE(Containers::arrayCast<Color4ub>(colorData)[DataOffset], Color4ub(128, 64, 32, 17));
#endif

77
src/Magnum/GL/Test/TransformFeedbackGLTest.cpp

@ -24,8 +24,11 @@
*/
#include <tuple>
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/Reference.h>
#include <Corrade/TestSuite/Compare/Container.h>
#include "Magnum/DebugTools/BufferData.h"
#include "Magnum/Image.h"
#include "Magnum/GL/AbstractShaderProgram.h"
#include "Magnum/GL/Buffer.h"
@ -307,14 +310,11 @@ void TransformFeedbackGLTest::attachBase() {
MAGNUM_VERIFY_NO_GL_ERROR();
#ifdef MAGNUM_TARGET_WEBGL
CORRADE_SKIP("Can't map buffers on WebGL.");
#else
auto data = Containers::arrayCast<const Vector2>(output.mapRead(0, 2*sizeof(Vector2)));
CORRADE_COMPARE(data[0], Vector2(1.0f, -1.0f));
CORRADE_COMPARE(data[1], Vector2(0.0f, 0.0f));
output.unmap();
#endif
auto data = DebugTools::bufferData(output);
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Vector2>(data),
Containers::arrayView<Vector2>({{1.0f, -1.0f}, {0.0f, 0.0f}}),
TestSuite::Compare::Container);
}
void TransformFeedbackGLTest::attachRange() {
@ -354,14 +354,11 @@ void TransformFeedbackGLTest::attachRange() {
MAGNUM_VERIFY_NO_GL_ERROR();
#ifdef MAGNUM_TARGET_WEBGL
CORRADE_SKIP("Can't map buffers on WebGL.");
#else
auto data = Containers::arrayCast<const Vector2>(output.mapRead(256, 2*sizeof(Vector2)));
CORRADE_COMPARE(data[0], Vector2(1.0f, -1.0f));
CORRADE_COMPARE(data[1], Vector2(0.0f, 0.0f));
output.unmap();
#endif
auto data = DebugTools::bufferSubData(output, 256, 2*sizeof(Vector2));
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Vector2>(data),
Containers::arrayView<Vector2>({{1.0f, -1.0f}, {0.0f, 0.0f}}),
TestSuite::Compare::Container);
}
struct XfbMultiShader: AbstractShaderProgram {
@ -445,19 +442,17 @@ void TransformFeedbackGLTest::attachBases() {
MAGNUM_VERIFY_NO_GL_ERROR();
#ifdef MAGNUM_TARGET_WEBGL
CORRADE_SKIP("Can't map buffers on WebGL.");
#else
auto data1 = Containers::arrayCast<const Vector2>(output1.mapRead(0, 2*sizeof(Vector2)));
CORRADE_COMPARE(data1[0], Vector2(1.0f, -1.0f));
CORRADE_COMPARE(data1[1], Vector2(0.0f, 0.0f));
output1.unmap();
auto data2 = Containers::arrayCast<const Float>(output2.mapRead(0, 2*sizeof(Float)));
CORRADE_COMPARE(data2[0], 0.0f);
CORRADE_COMPARE(data2[1], -2.0f);
output2.unmap();
#endif
auto data1 = DebugTools::bufferData(output1);
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Vector2>(data1),
Containers::arrayView<Vector2>({{1.0f, -1.0f}, {0.0f, 0.0f}}),
TestSuite::Compare::Container);
auto data2 = DebugTools::bufferData(output2);
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Float>(data2),
Containers::arrayView({0.0f, -2.0f}),
TestSuite::Compare::Container);
}
void TransformFeedbackGLTest::attachRanges() {
@ -502,19 +497,17 @@ void TransformFeedbackGLTest::attachRanges() {
MAGNUM_VERIFY_NO_GL_ERROR();
#ifdef MAGNUM_TARGET_WEBGL
CORRADE_SKIP("Can't map buffers on WebGL.");
#else
auto data1 = Containers::arrayCast<const Vector2>(output1.mapRead(256, 2*sizeof(Vector2)));
CORRADE_COMPARE(data1[0], Vector2(1.0f, -1.0f));
CORRADE_COMPARE(data1[1], Vector2(0.0f, 0.0f));
output1.unmap();
auto data2 = Containers::arrayCast<const Float>(output2.mapRead(512, 2*sizeof(Float)));
CORRADE_COMPARE(data2[0], 0.0f);
CORRADE_COMPARE(data2[1], -2.0f);
output2.unmap();
#endif
auto data1 = DebugTools::bufferSubData(output1, 256, 2*sizeof(Vector2));
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Vector2>(data1),
Containers::arrayView<Vector2>({{1.0f, -1.0f}, {0.0f, 0.0f}}),
TestSuite::Compare::Container);
auto data2 = DebugTools::bufferSubData(output2, 512, 2*sizeof(Float));
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE_AS(Containers::arrayCast<Float>(data2),
Containers::arrayView({0.0f, -2.0f}),
TestSuite::Compare::Container);
}
#ifndef MAGNUM_TARGET_GLES

3
src/Magnum/Text/Test/CMakeLists.txt

@ -53,4 +53,7 @@ if(TARGET_GL AND BUILD_GL_TESTS)
corrade_add_test(TextDistanceFieldGlyphCacheGLTest DistanceFieldGlyphCacheGLTest.cpp LIBRARIES MagnumText MagnumOpenGLTester)
corrade_add_test(TextGlyphCacheGLTest GlyphCacheGLTest.cpp LIBRARIES MagnumText MagnumOpenGLTester)
corrade_add_test(TextRendererGLTest RendererGLTest.cpp LIBRARIES MagnumText MagnumOpenGLTester)
if(NOT MAGNUM_TARGET_GLES2)
target_link_libraries(TextRendererGLTest PRIVATE MagnumDebugTools)
endif()
endif()

35
src/Magnum/Text/Test/RendererGLTest.cpp

@ -32,6 +32,10 @@
#include "Magnum/Text/AbstractFont.h"
#include "Magnum/Text/Renderer.h"
#ifndef MAGNUM_TARGET_GLES2
#include "Magnum/DebugTools/BufferData.h"
#endif
namespace Magnum { namespace Text { namespace Test { namespace {
struct RendererGLTest: GL::OpenGLTester {
@ -187,10 +191,9 @@ void RendererGLTest::renderMesh() {
/* Bounds */
CORRADE_COMPARE(bounds, Range2D({0.0f, -0.5f}, {5.0f, 1.0f}).translated(offset));
/** @todo How to verify this on ES? */
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
/* Vertex buffer contents */
Containers::Array<char> vertices = vertexBuffer.data();
Containers::Array<char> vertices = DebugTools::bufferData(vertexBuffer);
CORRADE_COMPARE_AS(Containers::arrayCast<const Float>(vertices),
Containers::arrayView<Float>({
0.0f + offset.x(), 0.5f + offset.y(), 0.0f, 10.0f,
@ -208,8 +211,8 @@ void RendererGLTest::renderMesh() {
5.0f + offset.x(), 1.0f + offset.y(), 18.0f, 10.0f,
5.0f + offset.x(), -0.5f + offset.y(), 18.0f, 0.0f
}), TestSuite::Compare::Container);
Containers::Array<char> indices = indexBuffer.data();
/* Index buffer contents */
Containers::Array<char> indices = DebugTools::bufferData(indexBuffer);
CORRADE_COMPARE_AS(Containers::arrayCast<const UnsignedByte>(indices),
Containers::arrayView<UnsignedByte>({
0, 1, 2, 1, 3, 2,
@ -220,10 +223,11 @@ void RendererGLTest::renderMesh() {
}
void RendererGLTest::renderMeshIndexType() {
#ifndef MAGNUM_TARGET_GLES
#ifndef MAGNUM_TARGET_GLES2
TestFont font;
GL::Mesh mesh{NoCreate};
GL::Buffer vertexBuffer, indexBuffer;
GL::Buffer vertexBuffer{GL::Buffer::TargetHint::Array};
GL::Buffer indexBuffer{GL::Buffer::TargetHint::ElementArray};
/* Sizes: four vertices per glyph, each vertex has 2D position and 2D
texture coordinates, each float is four bytes; six indices per glyph. */
@ -232,7 +236,7 @@ void RendererGLTest::renderMeshIndexType() {
std::tie(mesh, std::ignore) = Text::Renderer3D::render(font, nullGlyphCache,
1.0f, std::string(64, 'a'), vertexBuffer, indexBuffer, GL::BufferUsage::StaticDraw);
MAGNUM_VERIFY_NO_GL_ERROR();
Containers::Array<char> indicesByte = indexBuffer.data();
Containers::Array<char> indicesByte = DebugTools::bufferData(indexBuffer);
CORRADE_COMPARE(vertexBuffer.size(), 256*(2 + 2)*4);
CORRADE_COMPARE(indicesByte.size(), 64*6);
CORRADE_COMPARE_AS(Containers::arrayCast<const UnsignedByte>(indicesByte).prefix(18),
@ -246,7 +250,7 @@ void RendererGLTest::renderMeshIndexType() {
std::tie(mesh, std::ignore) = Text::Renderer3D::render(font, nullGlyphCache,
1.0f, std::string(65, 'a'), vertexBuffer, indexBuffer, GL::BufferUsage::StaticDraw);
MAGNUM_VERIFY_NO_GL_ERROR();
Containers::Array<char> indicesShort = indexBuffer.data();
Containers::Array<char> indicesShort = DebugTools::bufferData(indexBuffer);
CORRADE_COMPARE(vertexBuffer.size(), 260*(2 + 2)*4);
CORRADE_COMPARE(indicesShort.size(), 65*6*2);
CORRADE_COMPARE_AS(Containers::arrayCast<const UnsignedShort>(indicesShort).prefix(18),
@ -256,7 +260,7 @@ void RendererGLTest::renderMeshIndexType() {
8, 9, 10, 9, 11, 10
}), TestSuite::Compare::Container);
#else
CORRADE_SKIP("Can't verify buffer contents on OpenGL ES.");
CORRADE_SKIP("Can't verify buffer contents on OpenGL ES 2.0.");
#endif
}
@ -280,9 +284,9 @@ void RendererGLTest::mutableText() {
renderer.reserve(4, GL::BufferUsage::DynamicDraw, GL::BufferUsage::DynamicDraw);
MAGNUM_VERIFY_NO_GL_ERROR();
CORRADE_COMPARE(renderer.capacity(), 4);
/** @todo How to verify this on ES? */
#ifndef MAGNUM_TARGET_GLES
Containers::Array<char> indices = renderer.indexBuffer().data();
#ifndef MAGNUM_TARGET_GLES2
Containers::Array<char> indices = DebugTools::bufferData(renderer.indexBuffer());
CORRADE_COMPARE_AS(Containers::arrayCast<const UnsignedByte>(indices).prefix(24),
Containers::arrayView<UnsignedByte>({
0, 1, 2, 1, 3, 2,
@ -301,9 +305,8 @@ void RendererGLTest::mutableText() {
/* Aligned to line/left, no offset needed */
/** @todo How to verify this on ES? */
#ifndef MAGNUM_TARGET_GLES
Containers::Array<char> vertices = renderer.vertexBuffer().data();
#ifndef MAGNUM_TARGET_GLES2
Containers::Array<char> vertices = DebugTools::bufferData(renderer.vertexBuffer());
CORRADE_COMPARE_AS(Containers::arrayCast<const Float>(vertices).prefix(48),
Containers::arrayView<Float>({
0.0f, 0.5f, 0.0f, 10.0f,

Loading…
Cancel
Save