| #ifndef _ESEXTCTEXTURECUBEMAPARRAYSTENCILATTACHMENTS_HPP |
| #define _ESEXTCTEXTURECUBEMAPARRAYSTENCILATTACHMENTS_HPP |
| /*------------------------------------------------------------------------- |
| * OpenGL Conformance Test Suite |
| * ----------------------------- |
| * |
| * Copyright (c) 2014-2016 The Khronos Group Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ /*! |
| * \file |
| * \brief |
| */ /*-------------------------------------------------------------------*/ |
| |
| /*! |
| * \file esextcTextureCubeMapArrayStencilAttachments.hpp |
| * \brief Texture Cube Map Array Stencil Attachments (Test 3) |
| */ /*-------------------------------------------------------------------*/ |
| |
| #include "../esextcTestCaseBase.hpp" |
| |
| namespace glcts |
| { |
| |
| /** Class used to store configuration and data for different texture cube map array textures |
| */ |
| class CubeMapArrayDataStorage |
| { |
| public: |
| /* Public functions */ |
| CubeMapArrayDataStorage(); |
| ~CubeMapArrayDataStorage(); |
| |
| void deinit(void); |
| void init(const glw::GLuint width, const glw::GLuint height, const glw::GLuint depth, |
| glw::GLubyte initial_value = 0); |
| |
| inline glw::GLuint getDepth() const |
| { |
| return m_depth; |
| } |
| inline glw::GLuint getHeight() const |
| { |
| return m_height; |
| } |
| inline glw::GLuint getWidth() const |
| { |
| return m_width; |
| } |
| |
| glw::GLuint getArraySize() const; |
| glw::GLubyte* getDataArray() const; |
| |
| protected: |
| /* Protected variables */ |
| glw::GLubyte* m_data_array; |
| glw::GLuint m_depth; |
| glw::GLuint m_height; |
| glw::GLuint m_width; |
| }; |
| |
| /** Implementation of Test 3 from CTS_EXT_texture_cube_map_array. |
| * Test description follows: |
| * |
| * Make sure cube-map texture layers can be used as stencil attachments. |
| * |
| * Category: Functionality tests, |
| * Optional dependency on EXT_geometry_shader; |
| * Priority: Must-have. |
| * |
| * Verify that a cube-map array texture layers carrying stencil data |
| * can be used as a stencil attachment for a framebuffer object. |
| * |
| * Clear the color buffer with (1, 0, 0, 1) color. Fill the upper half of |
| * the stencil buffer with 1 and the bottom half of the stencil buffer with 0. |
| * |
| * Configure the stencil test so that it the test passes only if the stencil |
| * buffer data for each fragment is larger than 0. |
| * The fragment shader should set the only output variable to (0, 1, 1, 0). |
| * |
| * The test should render a full-screen quad and then check the outcome of |
| * the operation. The test passes if top half is filled with (0, 1, 1, 0) |
| * and bottom half is set to (1, 0, 0, 1). |
| * |
| * Rendering to both layered (if supported) and non-layered framebuffer |
| * objects should be verified. |
| * |
| * Test four different cube-map array texture resolutions, as described |
| * in test 1. Both immutable and mutable textures should be checked. |
| */ |
| class TextureCubeMapArrayStencilAttachments : public TestCaseBase |
| { |
| public: |
| /* Public functions */ |
| TextureCubeMapArrayStencilAttachments(Context& context, const ExtParameters& extParams, const char* name, |
| const char* description, glw::GLboolean immutable_storage, |
| glw::GLboolean fbo_layered); |
| |
| virtual ~TextureCubeMapArrayStencilAttachments() |
| { |
| } |
| |
| virtual IterateResult iterate(void); |
| virtual void deinit(void); |
| |
| /* Public variables */ |
| static const glw::GLuint m_n_components; |
| static const glw::GLuint m_n_cube_map_array_configurations; |
| static const glw::GLuint m_n_vertices_gs; |
| |
| private: |
| /* Private variables */ |
| static const char* m_fragment_shader_code; |
| static const char* m_vertex_shader_code; |
| |
| glw::GLboolean m_fbo_layered; |
| glw::GLboolean m_immutable_storage; |
| |
| glw::GLuint m_fbo_draw_id; |
| glw::GLuint m_fbo_read_id; |
| glw::GLuint m_fragment_shader_id; |
| glw::GLuint m_geometry_shader_id; |
| glw::GLuint m_program_id; |
| glw::GLuint m_texture_cube_array_stencil_id; |
| glw::GLuint m_texture_cube_array_color_id; |
| glw::GLuint m_vao_id; |
| glw::GLuint m_vbo_id; |
| glw::GLuint m_vertex_shader_id; |
| |
| CubeMapArrayDataStorage* m_cube_map_array_data; |
| glw::GLubyte* m_result_data; |
| |
| /* Private functions */ |
| void buildAndUseProgram(glw::GLuint test_index); |
| void checkFramebufferStatus(glw::GLenum framebuffer_status); |
| void cleanAfterTest(void); |
| void createImmutableCubeArrayColor(glw::GLuint test_index); |
| void createImmutableCubeArrayStencil(glw::GLuint test_index); |
| void createMutableCubeArrayColor(glw::GLuint test_index); |
| void createMutableCubeArrayStencil(glw::GLuint test_index); |
| void fillStencilData(glw::GLuint test_index); |
| std::string getGeometryShaderCode(const std::string& max_vertices, const std::string& n_layers); |
| void initTest(void); |
| void initTestIteration(glw::GLuint test_index); |
| bool readPixelsAndCompareWithExpectedResult(glw::GLuint test_index); |
| void setupLayeredFramebuffer(void); |
| void setupNonLayeredFramebuffer(void); |
| }; |
| |
| } // namespace glcts |
| |
| #endif // _ESEXTCTEXTURECUBEMAPARRAYSTENCILATTACHMENTS_HPP |