Browse Source

SceneGraph: Test for Implementation::Camera<3>::fixAspectRatio().

vectorfields
Vladimír Vondruš 14 years ago
parent
commit
f6d1aa7bc9
  1. 4
      src/SceneGraph/Camera.h
  2. 30
      src/SceneGraph/Test/CameraTest.cpp
  3. 1
      src/SceneGraph/Test/CameraTest.h

4
src/SceneGraph/Camera.h

@ -137,12 +137,14 @@ template<class MatrixType, class VectorType, class ObjectType, class SceneType,
Math::Vector2<GLsizei> _viewport;
};
/** @todo Export implementation symbols only for tests */
#ifndef DOXYGEN_GENERATING_OUTPUT
/* These templates are instantiated in source file */
extern template class SCENEGRAPH_EXPORT Camera<Matrix4, Vector3, Object3D, Scene3D, Camera3D>;
namespace Implementation {
template<> class Camera<3> {
template<> class SCENEGRAPH_EXPORT Camera<3> {
public:
static Matrix4 fixAspectRatio(AspectRatioPolicy aspectRatioPolicy, const Math::Vector2<GLsizei>& viewport);
};

30
src/SceneGraph/Test/CameraTest.cpp

@ -22,10 +22,38 @@ CORRADE_TEST_MAIN(Magnum::SceneGraph::Test::CameraTest)
namespace Magnum { namespace SceneGraph { namespace Test {
CameraTest::CameraTest() {
addTests(&CameraTest::orthographic,
addTests(&CameraTest::fixAspectRatio,
&CameraTest::orthographic,
&CameraTest::perspective);
}
void CameraTest::fixAspectRatio() {
/* Division by zero */
Math::Vector2<GLsizei> sizeZeroY(400, 0);
Math::Vector2<GLsizei> sizeZeroX(0, 300);
CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::Clip, sizeZeroY), Matrix4());
CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::Extend, sizeZeroX), Matrix4());
Math::Vector2<GLsizei> size(400, 300);
/* Not preserved */
CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::NotPreserved, size), Matrix4());
/* Clip */
Matrix4 expectedClip(1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 4.0f/3.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::Clip, size), expectedClip);
/* Extend */
Matrix4 expectedExtend(3.0f/4.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f);
CORRADE_COMPARE(Implementation::Camera<3>::fixAspectRatio(Implementation::AspectRatioPolicy::Extend, size), expectedExtend);
}
void CameraTest::orthographic() {
Camera3D camera;
camera.setOrthographic(5, 1, 9);

1
src/SceneGraph/Test/CameraTest.h

@ -23,6 +23,7 @@ class CameraTest: public Corrade::TestSuite::Tester<CameraTest> {
public:
CameraTest();
void fixAspectRatio();
void orthographic();
void perspective();
};

Loading…
Cancel
Save