Path: blob/main_old/src/tests/gl_tests/ClientArraysTest.cpp
1693 views
//1// Copyright 2017 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//56// ClientArraysTest.cpp : Tests of the GL_ANGLE_client_arrays extension.78#include "test_utils/ANGLETest.h"910#include "test_utils/gl_raii.h"1112namespace angle13{1415class ClientArraysTest : public ANGLETest16{17protected:18ClientArraysTest()19{20setWindowWidth(128);21setWindowHeight(128);22setConfigRedBits(8);23setConfigGreenBits(8);24setConfigBlueBits(8);25setConfigAlphaBits(8);26setClientArraysEnabled(false);27}28};2930// Context creation would fail if EGL_ANGLE_create_context_client_arrays was not available so31// the GL extension should always be present32TEST_P(ClientArraysTest, ExtensionStringExposed)33{34EXPECT_TRUE(IsGLExtensionEnabled("GL_ANGLE_client_arrays"));35}3637// Verify that GL_CLIENT_ARRAYS_ANGLE can be queried but not changed38TEST_P(ClientArraysTest, QueryValidation)39{40GLint intValue = 2;41glGetIntegerv(GL_CLIENT_ARRAYS_ANGLE, &intValue);42EXPECT_GL_NO_ERROR();43EXPECT_GL_FALSE(intValue);4445float floatValue = 2.0f;46glGetFloatv(GL_CLIENT_ARRAYS_ANGLE, &floatValue);47EXPECT_GL_NO_ERROR();48EXPECT_EQ(0.0f, floatValue);4950GLboolean boolValue = GL_TRUE;51glGetBooleanv(GL_CLIENT_ARRAYS_ANGLE, &boolValue);52EXPECT_GL_NO_ERROR();53EXPECT_GL_FALSE(boolValue);5455EXPECT_GL_FALSE(glIsEnabled(GL_CLIENT_ARRAYS_ANGLE));56EXPECT_GL_NO_ERROR();5758glEnable(GL_CLIENT_ARRAYS_ANGLE);59EXPECT_GL_ERROR(GL_INVALID_ENUM);6061glDisable(GL_CLIENT_ARRAYS_ANGLE);62EXPECT_GL_ERROR(GL_INVALID_ENUM);63}6465// Test that client-side array buffers are forbidden when client arrays are disabled66TEST_P(ClientArraysTest, ForbidsClientSideArrayBuffer)67{68const auto &vertices = GetQuadVertices();69glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 4, vertices.data());70ASSERT_GL_ERROR(GL_INVALID_OPERATION);71}7273// Test that client-side element array buffers are forbidden when client arrays are disabled74TEST_P(ClientArraysTest, ForbidsClientSideElementBuffer)75{76ASSERT_GL_FALSE(glIsEnabled(GL_CLIENT_ARRAYS_ANGLE));7778constexpr char kVS[] =79"attribute vec3 a_pos;\n"80"void main()\n"81"{\n"82" gl_Position = vec4(a_pos, 1.0);\n"83"}\n";8485ANGLE_GL_PROGRAM(program, kVS, essl1_shaders::fs::Red());8687GLint posLocation = glGetAttribLocation(program.get(), "a_pos");88ASSERT_NE(-1, posLocation);89glUseProgram(program.get());9091const auto &vertices = GetQuadVertices();9293GLBuffer vertexBuffer;94glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer.get());95glBufferData(GL_ARRAY_BUFFER, sizeof(vertices[0]) * vertices.size(), vertices.data(),96GL_STATIC_DRAW);9798glVertexAttribPointer(posLocation, 3, GL_FLOAT, GL_FALSE, 0, 0);99glEnableVertexAttribArray(posLocation);100101const GLubyte indices[] = {0, 1, 2, 3, 4, 5};102103ASSERT_GL_NO_ERROR();104glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices);105EXPECT_GL_ERROR(GL_INVALID_OPERATION);106}107108// Use this to select which configurations (e.g. which renderer, which GLES major version) these109// tests should be run against.110ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(ClientArraysTest);111} // namespace angle112113114