// // 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. // // CurrentNormalTest.cpp: Tests basic usage of glNormal3(f|x). #include "test_utils/ANGLETest.h" #include "test_utils/gl_raii.h" #include "util/random_utils.h" #include "common/vector_utils.h" #include using namespace angle; class CurrentNormalTest : public ANGLETest<> { protected: CurrentNormalTest() { setWindowWidth(32); setWindowHeight(32); setConfigRedBits(8); setConfigGreenBits(8); setConfigBlueBits(8); setConfigAlphaBits(8); setConfigDepthBits(24); } }; // State query: Checks the initial state is correct. TEST_P(CurrentNormalTest, InitialState) { const angle::Vector3 kUp(0.0f, 0.0f, 1.0f); angle::Vector3 actualNormal; glGetFloatv(GL_CURRENT_NORMAL, actualNormal.data()); EXPECT_GL_NO_ERROR(); EXPECT_EQ(kUp, actualNormal); } // Set test: Checks that the current normal is properly set and retrieved. TEST_P(CurrentNormalTest, Set) { glNormal3f(0.1f, 0.2f, 0.3f); EXPECT_GL_NO_ERROR(); angle::Vector3 actualNormal; glGetFloatv(GL_CURRENT_NORMAL, actualNormal.data()); EXPECT_GL_NO_ERROR(); EXPECT_EQ(angle::Vector3(0.1f, 0.2f, 0.3f), actualNormal); float epsilon = 0.00001f; glNormal3x(0x10000, 0x3333, 0x5555); EXPECT_GL_NO_ERROR(); glGetFloatv(GL_CURRENT_NORMAL, actualNormal.data()); EXPECT_GL_NO_ERROR(); EXPECT_NEAR(1.0f, actualNormal[0], epsilon); EXPECT_NEAR(0.2f, actualNormal[1], epsilon); EXPECT_NEAR(1.0f / 3.0f, actualNormal[2], epsilon); } ANGLE_INSTANTIATE_TEST_ES1(CurrentNormalTest);