• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _ESEXTCDRAWBUFFERSINDEXEDBASE_HPP
2 #define _ESEXTCDRAWBUFFERSINDEXEDBASE_HPP
3 /*-------------------------------------------------------------------------
4  * OpenGL Conformance Test Suite
5  * -----------------------------
6  *
7  * Copyright (c) 2015-2016 The Khronos Group Inc.
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */ /*!
22  * \file
23  * \brief
24  */ /*-------------------------------------------------------------------*/
25 
26 /*!
27  * \file  esextcDrawBuffersIndexedBase.hpp
28  * \brief Base class for Draw Buffers Indexed extension tests 1-6
29  */ /*-------------------------------------------------------------------*/
30 
31 #include "../esextcTestCaseBase.hpp"
32 #include "glwEnums.hpp"
33 #include <vector>
34 
35 namespace glcts
36 {
37 
38 /** Base class for Draw Buffers Indexed tests
39  **/
40 class DrawBuffersIndexedBase : public TestCaseBase
41 {
42 public:
43 	/** Public methods
44 	 **/
45 	DrawBuffersIndexedBase(Context& context, const ExtParameters& extParams, const char* name, const char* description);
46 
~DrawBuffersIndexedBase()47 	virtual ~DrawBuffersIndexedBase()
48 	{
49 	}
50 
51 private:
52 	virtual void init(void);
53 
54 protected:
55 	class BlendMaskState
56 	{
57 	public:
58 		glw::GLenum	enable;
59 		glw::GLenum	mode_rgb;
60 		glw::GLenum	mode_a;
61 		glw::GLenum	func_src_rgb;
62 		glw::GLenum	func_src_a;
63 		glw::GLenum	func_dst_rgb;
64 		glw::GLenum	func_dst_a;
65 		glw::GLboolean mask_r;
66 		glw::GLboolean mask_g;
67 		glw::GLboolean mask_b;
68 		glw::GLboolean mask_a;
69 
BlendMaskState()70 		BlendMaskState()
71 			: enable(GL_FALSE)
72 			, mode_rgb(GL_FUNC_ADD)
73 			, mode_a(GL_FUNC_ADD)
74 			, func_src_rgb(GL_ONE)
75 			, func_src_a(GL_ONE)
76 			, func_dst_rgb(GL_ZERO)
77 			, func_dst_a(GL_ZERO)
78 			, mask_r(GL_TRUE)
79 			, mask_g(GL_TRUE)
80 			, mask_b(GL_TRUE)
81 			, mask_a(GL_TRUE)
82 		{
83 		}
84 	};
85 
86 	class BlendMaskStateMachine
87 	{
88 	public:
89 		BlendMaskStateMachine(Context& context, tcu::TestLog& log);
90 		BlendMaskStateMachine(Context& context, tcu::TestLog& log, int dbs);
91 
92 		std::vector<BlendMaskState> state;
93 
94 		bool CheckEnumGeneral(glw::GLenum e, glw::GLenum state);
95 		bool CheckEnumForBuffer(int idx, glw::GLenum e, glw::GLenum state);
96 		bool CheckBuffer(int idx);
97 		bool CheckAll();
98 
99 		void SetEnablei(int idx);
100 		void SetDisablei(int idx);
101 		void SetColorMaski(int idx, glw::GLboolean r, glw::GLboolean g, glw::GLboolean b, glw::GLboolean a);
102 		void SetBlendEquationi(int idx, glw::GLenum mode);
103 		void SetBlendEquationSeparatei(int idx, glw::GLenum rgb, glw::GLenum a);
104 		void SetBlendFunci(int idx, glw::GLenum src, glw::GLenum dst);
105 		void SetBlendFuncSeparatei(int idx, glw::GLenum src_rgb, glw::GLenum dst_rgb, glw::GLenum src_a,
106 								   glw::GLenum dst_a);
107 		void SetEnable();
108 		void SetDisable();
109 		void SetColorMask(glw::GLboolean r, glw::GLboolean g, glw::GLboolean b, glw::GLboolean a);
110 		void SetBlendEquation(glw::GLenum mode);
111 		void SetBlendEquationSeparate(glw::GLenum rgb, glw::GLenum a);
112 		void SetBlendFunc(glw::GLenum src, glw::GLenum dst);
113 		void SetBlendFuncSeparate(glw::GLenum src_rgb, glw::GLenum dst_rgb, glw::GLenum src_a, glw::GLenum dst_a);
114 		void SetDefaults();
115 
116 	private:
117 		const glw::Functions& gl;
118 		tcu::TestLog&		  testLog;
119 	};
120 };
121 }
122 #endif // _ESEXTCDRAWBUFFERSINDEXEDBASE_HPP
123