// // 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. // // ClientStateEnable.cpp: Tests basic usage of gl(Enable|Disable)ClientState. #include "test_utils/ANGLETest.h" #include "test_utils/gl_raii.h" #include using namespace angle; class ClientStateEnable : public ANGLETest<> { protected: ClientStateEnable() { setWindowWidth(32); setWindowHeight(32); setConfigRedBits(8); setConfigGreenBits(8); setConfigBlueBits(8); setConfigAlphaBits(8); setConfigDepthBits(24); } std::vector mClientStates = { GL_VERTEX_ARRAY, GL_NORMAL_ARRAY, GL_COLOR_ARRAY, GL_POINT_SIZE_ARRAY_OES, GL_TEXTURE_COORD_ARRAY, }; }; // Checks that all client vertex array states are disabled to start with. TEST_P(ClientStateEnable, InitialState) { for (auto clientState : mClientStates) { EXPECT_GL_FALSE(glIsEnabled(clientState)); EXPECT_GL_NO_ERROR(); } } // Checks that glEnableClientState sets the state to be enabled, // and glDisableClientState sets the state to be disabled. TEST_P(ClientStateEnable, EnableState) { for (auto clientState : mClientStates) { EXPECT_GL_FALSE(glIsEnabled(clientState)); glEnableClientState(clientState); EXPECT_GL_NO_ERROR(); EXPECT_GL_TRUE(glIsEnabled(clientState)); glDisableClientState(clientState); EXPECT_GL_NO_ERROR(); EXPECT_GL_FALSE(glIsEnabled(clientState)); } } // Negative test: Checks that invalid enums for client state generate the proper GL error. TEST_P(ClientStateEnable, Negative) { glEnableClientState(0); EXPECT_GL_ERROR(GL_INVALID_ENUM); } // Checks that enable/disable states are different if we are in different client texture unit // states. TEST_P(ClientStateEnable, TextureUnit) { glEnableClientState(GL_TEXTURE_COORD_ARRAY); // Spec minimum lets us assume 2 multitexturing units. glClientActiveTexture(GL_TEXTURE1); EXPECT_GL_FALSE(glIsEnabled(GL_TEXTURE_COORD_ARRAY)); glEnableClientState(GL_TEXTURE_COORD_ARRAY); EXPECT_GL_TRUE(glIsEnabled(GL_TEXTURE_COORD_ARRAY)); glDisableClientState(GL_TEXTURE_COORD_ARRAY); EXPECT_GL_FALSE(glIsEnabled(GL_TEXTURE_COORD_ARRAY)); glClientActiveTexture(GL_TEXTURE0); EXPECT_GL_TRUE(glIsEnabled(GL_TEXTURE_COORD_ARRAY)); glDisableClientState(GL_TEXTURE_COORD_ARRAY); EXPECT_GL_FALSE(glIsEnabled(GL_TEXTURE_COORD_ARRAY)); } ANGLE_INSTANTIATE_TEST_ES1(ClientStateEnable);