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; Math::Vector2<GLsizei> _viewport;
}; };
/** @todo Export implementation symbols only for tests */
#ifndef DOXYGEN_GENERATING_OUTPUT #ifndef DOXYGEN_GENERATING_OUTPUT
/* These templates are instantiated in source file */ /* These templates are instantiated in source file */
extern template class SCENEGRAPH_EXPORT Camera<Matrix4, Vector3, Object3D, Scene3D, Camera3D>; extern template class SCENEGRAPH_EXPORT Camera<Matrix4, Vector3, Object3D, Scene3D, Camera3D>;
namespace Implementation { namespace Implementation {
template<> class Camera<3> { template<> class SCENEGRAPH_EXPORT Camera<3> {
public: public:
static Matrix4 fixAspectRatio(AspectRatioPolicy aspectRatioPolicy, const Math::Vector2<GLsizei>& viewport); 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 { namespace Magnum { namespace SceneGraph { namespace Test {
CameraTest::CameraTest() { CameraTest::CameraTest() {
addTests(&CameraTest::orthographic, addTests(&CameraTest::fixAspectRatio,
&CameraTest::orthographic,
&CameraTest::perspective); &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() { void CameraTest::orthographic() {
Camera3D camera; Camera3D camera;
camera.setOrthographic(5, 1, 9); camera.setOrthographic(5, 1, 9);

1
src/SceneGraph/Test/CameraTest.h

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

Loading…
Cancel
Save