blob: a464e068d891500628ec599ab2168c00db9cd84f [file] [log] [blame]
//
// Copyright 2018 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// MatrixMultTest.cpp: Tests basic usage of glMultMatrix(f|x).
#include "test_utils/ANGLETest.h"
#include "test_utils/gl_raii.h"
#include "common/matrix_utils.h"
#include "random_utils.h"
#include <stdint.h>
using namespace angle;
class MatrixMultTest : public ANGLETest
{
protected:
MatrixMultTest()
{
setWindowWidth(32);
setWindowHeight(32);
setConfigRedBits(8);
setConfigGreenBits(8);
setConfigBlueBits(8);
setConfigAlphaBits(8);
setConfigDepthBits(24);
}
};
// Multiplies identity matrix with itself.
TEST_P(MatrixMultTest, Identity)
{
angle::Mat4 testMatrix;
angle::Mat4 outputMatrix;
glMultMatrixf(testMatrix.data());
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_MODELVIEW_MATRIX, outputMatrix.data());
EXPECT_GL_NO_ERROR();
EXPECT_EQ(angle::Mat4(), outputMatrix);
}
// Multiplies translation matrix and checks matrix underneath in stack is not affected.
TEST_P(MatrixMultTest, Translation)
{
glPushMatrix();
angle::Mat4 testMatrix = angle::Mat4::Translate(angle::Vector3(1.0f, 0.0f, 0.0f));
angle::Mat4 outputMatrix;
glMultMatrixf(testMatrix.data());
EXPECT_GL_NO_ERROR();
glMultMatrixf(testMatrix.data());
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_MODELVIEW_MATRIX, outputMatrix.data());
EXPECT_GL_NO_ERROR();
EXPECT_EQ(angle::Mat4::Translate(angle::Vector3(2.0f, 0.0f, 0.0f)), outputMatrix);
glPopMatrix();
glGetFloatv(GL_MODELVIEW_MATRIX, outputMatrix.data());
EXPECT_GL_NO_ERROR();
EXPECT_EQ(angle::Mat4(), outputMatrix);
}
ANGLE_INSTANTIATE_TEST(MatrixMultTest, ES1_D3D11(), ES1_OPENGL(), ES1_OPENGLES());