blob: 230740d54a35036ae108ed8717228146fd0a067f [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.
//
// CurrentColorTest.cpp: Tests basic usage of glColor4(f|ub|x).
#include "test_utils/ANGLETest.h"
#include "test_utils/gl_raii.h"
#include "util/random_utils.h"
#include <stdint.h>
using namespace angle;
class CurrentColorTest : public ANGLETest
{
protected:
CurrentColorTest()
{
setWindowWidth(32);
setWindowHeight(32);
setConfigRedBits(8);
setConfigGreenBits(8);
setConfigBlueBits(8);
setConfigAlphaBits(8);
setConfigDepthBits(24);
}
};
// State query: Checks the initial state is correct.
TEST_P(CurrentColorTest, InitialState)
{
const GLColor32F kFloatWhite(1.0f, 1.0f, 1.0f, 1.0f);
GLColor32F actualColor;
glGetFloatv(GL_CURRENT_COLOR, &actualColor.R);
EXPECT_GL_NO_ERROR();
EXPECT_EQ(kFloatWhite, actualColor);
}
// Set test: Checks that the current color is properly set and retrieved.
TEST_P(CurrentColorTest, Set)
{
float epsilon = 0.00001f;
glColor4f(0.1f, 0.2f, 0.3f, 0.4f);
EXPECT_GL_NO_ERROR();
GLColor32F floatColor;
glGetFloatv(GL_CURRENT_COLOR, &floatColor.R);
EXPECT_GL_NO_ERROR();
EXPECT_EQ(GLColor32F(0.1f, 0.2f, 0.3f, 0.4f), floatColor);
glColor4ub(0xff, 0x0, 0x55, 0x33);
glGetFloatv(GL_CURRENT_COLOR, &floatColor.R);
EXPECT_GL_NO_ERROR();
EXPECT_NEAR(1.0f, floatColor.R, epsilon);
EXPECT_NEAR(0.0f, floatColor.G, epsilon);
EXPECT_NEAR(1.0f / 3.0f, floatColor.B, epsilon);
EXPECT_NEAR(0.2f, floatColor.A, epsilon);
glColor4x(0x10000, 0x0, 0x3333, 0x5555);
glGetFloatv(GL_CURRENT_COLOR, &floatColor.R);
EXPECT_GL_NO_ERROR();
EXPECT_NEAR(1.0f, floatColor.R, epsilon);
EXPECT_NEAR(0.0f, floatColor.G, epsilon);
EXPECT_NEAR(0.2f, floatColor.B, epsilon);
EXPECT_NEAR(1.0f / 3.0f, floatColor.A, epsilon);
}
ANGLE_INSTANTIATE_TEST_ES1(CurrentColorTest);