blob: 26ba9d3a13406c127f759f98b1265b218e587988 [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.
//
// FogTest.cpp: Tests basic usage of glFog.
#include "test_utils/ANGLETest.h"
#include "test_utils/gl_raii.h"
#include "util/random_utils.h"
#include <stdint.h>
using namespace angle;
class FogTest : public ANGLETest
{
protected:
FogTest()
{
setWindowWidth(32);
setWindowHeight(32);
setConfigRedBits(8);
setConfigGreenBits(8);
setConfigBlueBits(8);
setConfigAlphaBits(8);
setConfigDepthBits(24);
}
};
// Initial state check.
TEST_P(FogTest, InitialState)
{
EXPECT_GL_FALSE(glIsEnabled(GL_FOG));
EXPECT_GL_NO_ERROR();
GLint fogMode;
glGetIntegerv(GL_FOG_MODE, &fogMode);
EXPECT_GL_NO_ERROR();
EXPECT_GLENUM_EQ(GL_EXP, fogMode);
GLfloat fogModeAsFloat;
glGetFloatv(GL_FOG_MODE, &fogModeAsFloat);
EXPECT_GL_NO_ERROR();
EXPECT_GLENUM_EQ(GL_EXP, fogModeAsFloat);
GLfloat fogStart;
GLfloat fogEnd;
GLfloat fogDensity;
glGetFloatv(GL_FOG_START, &fogStart);
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_FOG_END, &fogEnd);
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_FOG_DENSITY, &fogDensity);
EXPECT_GL_NO_ERROR();
EXPECT_EQ(0.0f, fogStart);
EXPECT_EQ(1.0f, fogEnd);
EXPECT_EQ(1.0f, fogDensity);
const GLColor32F kInitialFogColor(0.0f, 0.0f, 0.0f, 0.0f);
GLColor32F initialFogColor;
glGetFloatv(GL_FOG_COLOR, &initialFogColor.R);
EXPECT_GL_NO_ERROR();
EXPECT_EQ(kInitialFogColor, initialFogColor);
}
// Negative test for parameter names.
TEST_P(FogTest, NegativeParameter)
{
glFogfv(0, nullptr);
EXPECT_GL_ERROR(GL_INVALID_ENUM);
}
// Negative test for parameter values.
TEST_P(FogTest, NegativeValues)
{
glFogf(GL_FOG_MODE, 0.0f);
EXPECT_GL_ERROR(GL_INVALID_VALUE);
glFogf(GL_FOG_DENSITY, -1.0f);
EXPECT_GL_ERROR(GL_INVALID_VALUE);
}
// Checks that fog state can be set.
TEST_P(FogTest, Set)
{
GLfloat fogValue[4] = {};
glFogf(GL_FOG_MODE, GL_EXP2);
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_FOG_MODE, fogValue);
EXPECT_GL_NO_ERROR();
EXPECT_GLENUM_EQ(GL_EXP2, fogValue[0]);
glFogf(GL_FOG_DENSITY, 2.0f);
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_FOG_DENSITY, fogValue);
EXPECT_GL_NO_ERROR();
EXPECT_GLENUM_EQ(2.0f, fogValue[0]);
glFogf(GL_FOG_START, 2.0f);
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_FOG_START, fogValue);
EXPECT_GL_NO_ERROR();
EXPECT_GLENUM_EQ(2.0f, fogValue[0]);
glFogf(GL_FOG_END, 2.0f);
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_FOG_END, fogValue);
EXPECT_GL_NO_ERROR();
EXPECT_GLENUM_EQ(2.0f, fogValue[0]);
const GLColor32F testColor(0.1f, 0.2f, 0.3f, 0.4f);
glFogfv(GL_FOG_COLOR, &testColor.R);
EXPECT_GL_NO_ERROR();
glGetFloatv(GL_FOG_COLOR, fogValue);
EXPECT_GL_NO_ERROR();
EXPECT_EQ(0.1f, fogValue[0]);
EXPECT_EQ(0.2f, fogValue[1]);
EXPECT_EQ(0.3f, fogValue[2]);
EXPECT_EQ(0.4f, fogValue[3]);
}
ANGLE_INSTANTIATE_TEST_ES1(FogTest);