1 /*-------------------------------------------------------------------------
2 * drawElements Quality Program Reference Renderer
3 * -----------------------------------------------
5 * Copyright 2014 The Android Open Source Project
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
21 * \brief Reference renderer render state.
22 *//*--------------------------------------------------------------------*/
24 goog
.provide('framework.referencerenderer.rrRenderState');
25 goog
.require('framework.common.tcuTexture');
26 goog
.require('framework.delibs.debase.deMath');
27 goog
.require('framework.referencerenderer.rrDefs');
28 goog
.require('framework.referencerenderer.rrMultisamplePixelBufferAccess');
30 goog
.scope(function() {
32 var rrRenderState
= framework
.referencerenderer
.rrRenderState
;
33 var tcuTexture
= framework
.common
.tcuTexture
;
34 var deMath
= framework
.delibs
.debase
.deMath
;
35 var rrMultisamplePixelBufferAccess
= framework
.referencerenderer
.rrMultisamplePixelBufferAccess
;
36 var rrDefs
= framework
.referencerenderer
.rrDefs
;
39 * Enum for rrRenderState.HorizontalFill values.
42 rrRenderState
.HorizontalFill
= {
48 * Enum for rrRenderState.VerticalFill values.
51 rrRenderState
.VerticalFill
= {
57 * Enum for rrRenderState.Winding values.
60 rrRenderState
.Winding
= {
66 * Enum for rrRenderState.CullMode values.
69 rrRenderState
.CullMode
= {
75 /**rrRenderState.Winding : rrRenderState.Winding,
79 rrRenderState
.RasterizationState = function() {
80 /** @type {number} */ this.winding
= rrRenderState
.Winding
.CCW
;
81 /** @type {number} */ this.horizontalFill
= rrRenderState
.HorizontalFill
.LEFT
;
82 /** @type {number} */ this.verticalFill
= rrRenderState
.VerticalFill
.BOTTOM
;
86 * Enum for rrRenderState.TestFunc values.
89 rrRenderState
.TestFunc
= {
101 * Enum for rrRenderState.StencilOp values.
104 rrRenderState
.StencilOp
= {
108 INCR
: 3, //!< Increment with saturation.
109 DECR
: 4, //!< Decrement with saturation.
116 * Enum for rrRenderState.BlendMode values.
119 rrRenderState
.BlendMode
= {
120 NONE
: 0, //!< No blending.
121 STANDARD
: 1 //!< Standard blending.
122 // Advanced blending is not supported
123 // ADVANCED : 2 //!< Advanced blending mode, as defined in gl.KHR_blend_equation_advanced.
127 * Enum for rrRenderState.BlendEquation values.
130 rrRenderState
.BlendEquation
= {
139 // * Enum for rrRenderState.BlendEquationAdvanced values.
142 // rrRenderState.BlendEquationAdvanced = {
155 // HSL_SATURATION : 12,
157 // HSL_LUMINOSITY : 14
161 * Enum for rrRenderState.BlendFunc values.
164 rrRenderState
.BlendFunc
= {
168 ONE_MINUS_SRC_COLOR
: 3,
170 ONE_MINUS_DST_COLOR
: 5,
172 ONE_MINUS_SRC_ALPHA
: 7,
174 ONE_MINUS_DST_ALPHA
: 9,
176 ONE_MINUS_CONSTANT_COLOR
: 11,
178 ONE_MINUS_CONSTANT_ALPHA
: 13,
179 SRC_ALPHA_SATURATE
: 14,
181 ONE_MINUS_SRC1_COLOR
: 16,
183 ONE_MINUS_SRC1_ALPHA
: 18
189 rrRenderState
.StencilState = function() {
190 /** @type {number} */ this.func
= rrRenderState
.TestFunc
.ALWAYS
;
191 /** @type {number} */ this.ref
= 0;
192 /** @type {number} */ this.compMask
= ~0;
193 /** @type {number} */ this.sFail
= rrRenderState
.StencilOp
.KEEP
;
194 /** @type {number} */ this.dpFail
= rrRenderState
.StencilOp
.KEEP
;
195 /** @type {number} */ this.dpPass
= rrRenderState
.StencilOp
.KEEP
;
196 /** @type {number} */ this.writeMask
= ~0;
202 rrRenderState
.BlendState = function() {
203 /** @type {number} */ this.equation
= rrRenderState
.BlendEquation
.ADD
;
204 /** @type {number} */ this.srcFunc
= rrRenderState
.BlendFunc
.ONE
;
205 /** @type {number} */ this.dstFunc
= rrRenderState
.BlendFunc
.ZERO
;
209 * @param {(Array<number>|number)} left_
210 * @param {number=} bottom_
211 * @param {number=} width_
212 * @param {number=} height_
215 rrRenderState
.WindowRectangle = function(left_
, bottom_
, width_
, height_
) {
216 // Is first parameter an array? Use it
217 if (left_
.length
&& left_
.length
== 4) {
218 this.left
= left_
[0];
219 this.bottom
= left_
[1];
220 this.width
= left_
[2];
221 this.height
= left_
[3];
224 this.bottom
= bottom_
;
226 this.height
= height_
;
233 rrRenderState
.FragmentOperationState = function() {
234 /** @type {boolean} */ this.scissorTestEnabled
= false;
235 /** @type {rrRenderState.WindowRectangle} */ this.scissorRectangle
= new rrRenderState
.WindowRectangle(0, 0, 1, 1);
237 /** @type {boolean} */ this.stencilTestEnabled
= false;
239 /** @type {Array<rrRenderState.StencilState>} */ this.stencilStates
= [];
240 for (var type
in rrDefs
.FaceType
)
241 this.stencilStates
[rrDefs
.FaceType
[type
]] = new rrRenderState
.StencilState();
243 /** @type {boolean} */ this.depthTestEnabled
= false;
244 /** @type {rrRenderState.TestFunc} */ this.depthFunc
= rrRenderState
.TestFunc
.LESS
;
245 /** @type {boolean} */ this.depthMask
= true;
247 /** @type {rrRenderState.BlendMode} */ this.blendMode
= rrRenderState
.BlendMode
.NONE
;
248 /** @type {rrRenderState.BlendState} */ this.blendRGBState
= new rrRenderState
.BlendState();
249 /** @type {rrRenderState.BlendState} */ this.blendAState
= new rrRenderState
.BlendState();
250 /** @type {Array<number>} */ this.blendColor
= [0.0, 0.0, 0.0, 0.0];
251 // /** @type {rrRenderState.BlendEquationAdvanced} */ this.blendEquationAdvanced = null;
253 /** @type {boolean} */ this.sRGBEnabled
= true;
255 /** @type {boolean} */ this.depthClampEnabled
= false;
257 /** @type {boolean} */ this.polygonOffsetEnabled
= false;
258 /** @type {number} */ this.polygonOffsetFactor
= 0.0;
259 /** @type {number} */ this.polygonOffsetUnits
= 0.0;
261 /** @type {Array<boolean>} */ this.colorMask
= [true, true, true, true];
263 /** @type {number} */ this.numStencilBits
= 8;
269 rrRenderState
.PointState = function() {
270 /** @type {number} */ this.pointSize
= 1.0;
276 rrRenderState
.LineState = function() {
277 /** @type {number} */ this.lineWidth
= 1.0;
281 * Constructor checks if the parameter has a "raw" member to detect if the instance is
282 * of type rrRenderState.WindowRectangle or MultisamplePixelBufferAccess.
283 * @param {rrRenderState.WindowRectangle|rrMultisamplePixelBufferAccess.MultisamplePixelBufferAccess} rect_
286 rrRenderState
.ViewportState = function(rect_
) {
287 /** @type {number} */ this.zn
= 0.0;
288 /** @type {number} */ this.zf
= 1.0;
289 /** @type {rrRenderState.WindowRectangle} */ this.rect
;
292 this.rect
= new rrRenderState
.WindowRectangle(0, 0, rect_
.raw().getHeight(),
293 rect_
.raw().getDepth());
295 this.rect
= /** @type {rrRenderState.WindowRectangle} */ (rect_
);
302 rrRenderState
.RestartState = function() {
303 /** @type {boolean} */ this.enabled
= false;
304 /** @type {number} */ this.restartIndex
= 0xFFFFFFFF;
309 * @param {rrRenderState.ViewportState} viewport_
311 rrRenderState
.RenderState = function(viewport_
) {
312 /** @type {rrRenderState.CullMode} */ this.cullMode
= rrRenderState
.CullMode
.NONE
;
313 /** @type {number} */ this.provokingVertexConvention
;
314 /** @type {rrRenderState.ViewportState} */ this.viewport
= viewport_
;
316 /** @type {rrRenderState.RasterizationState} */ this.rasterization
= new rrRenderState
.RasterizationState();
317 /** @type {rrRenderState.FragmentOperationState} */ this.fragOps
= new rrRenderState
.FragmentOperationState();
318 /** @type {rrRenderState.PointState} */ this.point
= new rrRenderState
.PointState();
319 /** @type {rrRenderState.LineState} */ this.line
= new rrRenderState
.LineState();
320 /** @type {rrRenderState.RestartState} */ this.restart
= new rrRenderState
.RestartState();