123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // Copyright (c) 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include <GLES2/gl2.h>
- #include <GLES2/gl2ext.h>
- #include <GLES3/gl3.h>
- #include <stdint.h>
- #include "gpu/command_buffer/tests/gl_manager.h"
- #include "gpu/command_buffer/tests/gl_test_utils.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace gpu {
- // A collection of tests that exercise the GL_EXT_srgb extension.
- class GLVirtualContextsEXTWindowRectanglesTest : public testing::Test {
- protected:
- void SetUp() override {
- GLManager::Options options;
- options.context_type = CONTEXT_TYPE_OPENGLES3;
- gl_real_shared_.Initialize(options);
- if (!IsApplicable())
- return;
- options.virtual_manager = &gl_real_shared_;
- gl1_.Initialize(options);
- gl2_.Initialize(options);
- }
- void TearDown() override {
- if (IsApplicable()) {
- gl1_.Destroy();
- gl2_.Destroy();
- }
- gl_real_shared_.Destroy();
- }
- bool IsApplicable() const {
- // Not applicable for devices not supporting OpenGLES3.
- if (!gl_real_shared_.IsInitialized()) {
- return false;
- }
- bool have_ext = GLTestHelper::HasExtension("GL_EXT_window_rectangles");
- return have_ext;
- }
- GLManager gl_real_shared_;
- GLManager gl1_;
- GLManager gl2_;
- };
- TEST_F(GLVirtualContextsEXTWindowRectanglesTest, Basic) {
- if (!IsApplicable()) {
- return;
- }
- // Context 1: Set window rectangles state.
- gl1_.MakeCurrent();
- {
- GLint box[12] = {};
- for (int i = 0; i < 12; ++i) {
- box[i] = i;
- }
- glWindowRectanglesEXT(GL_INCLUSIVE_EXT, 3, box);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
- }
- // Context 2: Make sure it still has the default state.
- gl2_.MakeCurrent();
- {
- GLint max = -1;
- {
- glGetIntegerv(GL_MAX_WINDOW_RECTANGLES_EXT, &max);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
- EXPECT_GE(max, 4);
- }
- {
- int mode = -1;
- glGetIntegerv(GL_WINDOW_RECTANGLE_MODE_EXT, &mode);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
- EXPECT_EQ(GL_EXCLUSIVE_EXT, mode);
- }
- {
- GLint num = -1;
- glGetIntegerv(GL_NUM_WINDOW_RECTANGLES_EXT, &num);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
- EXPECT_EQ(0, num);
- }
- for (int i = 0; i < max; ++i) {
- GLint rect[4] = {-1, -1, -1, -1};
- glGetIntegeri_v(GL_WINDOW_RECTANGLE_EXT, i, rect);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
- EXPECT_EQ(0, rect[0]);
- EXPECT_EQ(0, rect[1]);
- EXPECT_EQ(0, rect[2]);
- EXPECT_EQ(0, rect[3]);
- }
- }
- // Context 1: Make sure it still has the state it set.
- gl1_.MakeCurrent();
- {
- {
- int mode = -1;
- glGetIntegerv(GL_WINDOW_RECTANGLE_MODE_EXT, &mode);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
- EXPECT_EQ(GL_INCLUSIVE_EXT, mode);
- }
- {
- GLint num = -1;
- glGetIntegerv(GL_NUM_WINDOW_RECTANGLES_EXT, &num);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
- EXPECT_EQ(3, num);
- }
- for (int i = 0; i < 3; ++i) {
- GLint rect[4] = {-1, -1, -1, -1};
- glGetIntegeri_v(GL_WINDOW_RECTANGLE_EXT, i, rect);
- EXPECT_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError());
- EXPECT_EQ(4 * i + 0, rect[0]);
- EXPECT_EQ(4 * i + 1, rect[1]);
- EXPECT_EQ(4 * i + 2, rect[2]);
- EXPECT_EQ(4 * i + 3, rect[3]);
- }
- }
- }
- } // namespace gpu
|