1 //
2 // Copyright 2018 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6
7 // MatrixLoadTest.cpp: Tests basic usage of glColor4(f|ub|x).
8
9 #include "test_utils/ANGLETest.h"
10 #include "test_utils/gl_raii.h"
11
12 #include "common/matrix_utils.h"
13 #include "util/random_utils.h"
14
15 #include <stdint.h>
16
17 using namespace angle;
18
19 class MatrixLoadTest : public ANGLETest
20 {
21 protected:
MatrixLoadTest()22 MatrixLoadTest()
23 {
24 setWindowWidth(32);
25 setWindowHeight(32);
26 setConfigRedBits(8);
27 setConfigGreenBits(8);
28 setConfigBlueBits(8);
29 setConfigAlphaBits(8);
30 setConfigDepthBits(24);
31 }
32 };
33
34 // Checks that a matrix can be loaded.
TEST_P(MatrixLoadTest,Basic)35 TEST_P(MatrixLoadTest, Basic)
36 {
37 angle::Mat4 testMatrix(0.0f, 4.0f, 8.0f, 12.0f, 1.0f, 5.0f, 9.0f, 10.0f, 2.0f, 6.0f, 10.0f,
38 14.0f, 3.0f, 7.0f, 11.0f, 15.0f);
39
40 angle::Mat4 outputMatrix;
41
42 glLoadMatrixf(testMatrix.data());
43 EXPECT_GL_NO_ERROR();
44
45 glGetFloatv(GL_MODELVIEW_MATRIX, outputMatrix.data());
46 EXPECT_GL_NO_ERROR();
47
48 EXPECT_EQ(testMatrix, outputMatrix);
49 }
50
51 // Checks that loading a matrix doesn't affect the matrix below in the stack.
TEST_P(MatrixLoadTest,PushPop)52 TEST_P(MatrixLoadTest, PushPop)
53 {
54 glPushMatrix();
55
56 angle::Mat4 testMatrix(0.0f, 4.0f, 8.0f, 12.0f, 1.0f, 5.0f, 9.0f, 10.0f, 2.0f, 6.0f, 10.0f,
57 14.0f, 3.0f, 7.0f, 11.0f, 15.0f);
58
59 angle::Mat4 outputMatrix;
60
61 glLoadMatrixf(testMatrix.data());
62 EXPECT_GL_NO_ERROR();
63
64 glGetFloatv(GL_MODELVIEW_MATRIX, outputMatrix.data());
65 EXPECT_GL_NO_ERROR();
66
67 EXPECT_EQ(testMatrix, outputMatrix);
68
69 glPopMatrix();
70
71 glGetFloatv(GL_MODELVIEW_MATRIX, outputMatrix.data());
72 EXPECT_GL_NO_ERROR();
73 EXPECT_EQ(angle::Mat4(), outputMatrix);
74 }
75
76 // Checks that matrices can be loaded for each type of matrix.
TEST_P(MatrixLoadTest,Modes)77 TEST_P(MatrixLoadTest, Modes)
78 {
79 angle::Mat4 testMatrix(0.0f, 4.0f, 8.0f, 12.0f, 1.0f, 5.0f, 9.0f, 10.0f, 2.0f, 6.0f, 10.0f,
80 14.0f, 3.0f, 7.0f, 11.0f, 15.0f);
81 angle::Mat4 outputMatrix;
82
83 std::vector<std::pair<GLenum, GLenum>> modeTypes = {{GL_PROJECTION, GL_PROJECTION_MATRIX},
84 {GL_MODELVIEW, GL_MODELVIEW_MATRIX},
85 {GL_TEXTURE, GL_TEXTURE_MATRIX}};
86
87 for (auto modeType : modeTypes)
88 {
89 auto mode = modeType.first;
90 auto matrixType = modeType.second;
91
92 glMatrixMode(mode);
93 EXPECT_GL_NO_ERROR();
94 glGetFloatv(matrixType, outputMatrix.data());
95 EXPECT_GL_NO_ERROR();
96 EXPECT_EQ(angle::Mat4(), outputMatrix);
97
98 glLoadMatrixf(testMatrix.data());
99 glGetFloatv(matrixType, outputMatrix.data());
100 EXPECT_GL_NO_ERROR();
101 EXPECT_EQ(testMatrix, outputMatrix);
102 }
103 }
104
105 ANGLE_INSTANTIATE_TEST_ES1(MatrixLoadTest);
106