rrRenderState.js (9375B)
1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program Reference Renderer 3 * ----------------------------------------------- 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 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 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 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. 18 * 19 *//*! 20 * \file 21 * \brief Reference renderer render state. 22 *//*--------------------------------------------------------------------*/ 23 'use strict'; 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'); 29 30 goog.scope(function() { 31 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; 37 38 /** 39 * Enum for rrRenderState.HorizontalFill values. 40 * @enum {number} 41 */ 42 rrRenderState.HorizontalFill = { 43 LEFT: 0, 44 RIGHT: 1 45 }; 46 47 /** 48 * Enum for rrRenderState.VerticalFill values. 49 * @enum {number} 50 */ 51 rrRenderState.VerticalFill = { 52 TOP: 0, 53 BOTTOM: 1 54 }; 55 56 /** 57 * Enum for rrRenderState.Winding values. 58 * @enum {number} 59 */ 60 rrRenderState.Winding = { 61 CCW: 0, 62 CC: 1 63 }; 64 65 /** 66 * Enum for rrRenderState.CullMode values. 67 * @enum {number} 68 */ 69 rrRenderState.CullMode = { 70 NONE: 0, 71 BACK: 1, 72 FRONT: 2 73 }; 74 75 /**rrRenderState.Winding : rrRenderState.Winding, 76 77 * @constructor 78 */ 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; 83 }; 84 85 /** 86 * Enum for rrRenderState.TestFunc values. 87 * @enum {number} 88 */ 89 rrRenderState.TestFunc = { 90 NEVER: 0, 91 ALWAYS: 1, 92 LESS: 2, 93 LEQUAL: 3, 94 GREATER: 4, 95 GEQUAL: 5, 96 EQUAL: 6, 97 NOTEQUAL: 7 98 }; 99 100 /** 101 * Enum for rrRenderState.StencilOp values. 102 * @enum {number} 103 */ 104 rrRenderState.StencilOp = { 105 KEEP: 0, 106 ZERO: 1, 107 REPLACE: 2, 108 INCR: 3, //!< Increment with saturation. 109 DECR: 4, //!< Decrement with saturation. 110 INCR_WRAP: 5, 111 DECR_WRAP: 6, 112 INVERT: 7 113 }; 114 115 /** 116 * Enum for rrRenderState.BlendMode values. 117 * @enum {number} 118 */ 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. 124 }; 125 126 /** 127 * Enum for rrRenderState.BlendEquation values. 128 * @enum {number} 129 */ 130 rrRenderState.BlendEquation = { 131 ADD: 0, 132 SUBTRACT: 1, 133 REVERSE_SUBTRACT: 2, 134 MIN: 3, 135 MAX: 4 136 }; 137 138 // /** 139 // * Enum for rrRenderState.BlendEquationAdvanced values. 140 // * @enum {number} 141 // */ 142 // rrRenderState.BlendEquationAdvanced = { 143 // MULTIPLY : 0, 144 // SCREEN : 1, 145 // OVERLAY : 2, 146 // DARKEN : 3, 147 // LIGHTEN : 4, 148 // COLORDODGE : 5, 149 // COLORBURN : 6, 150 // HARDLIGHT : 7, 151 // SOFTLIGHT : 8, 152 // DIFFERENCE : 9, 153 // EXCLUSION : 10, 154 // HSL_HUE : 11, 155 // HSL_SATURATION : 12, 156 // HSL_COLOR : 13, 157 // HSL_LUMINOSITY : 14 158 // }; 159 160 /** 161 * Enum for rrRenderState.BlendFunc values. 162 * @enum {number} 163 */ 164 rrRenderState.BlendFunc = { 165 ZERO: 0, 166 ONE: 1, 167 SRC_COLOR: 2, 168 ONE_MINUS_SRC_COLOR: 3, 169 DST_COLOR: 4, 170 ONE_MINUS_DST_COLOR: 5, 171 SRC_ALPHA: 6, 172 ONE_MINUS_SRC_ALPHA: 7, 173 DST_ALPHA: 8, 174 ONE_MINUS_DST_ALPHA: 9, 175 CONSTANT_COLOR: 10, 176 ONE_MINUS_CONSTANT_COLOR: 11, 177 CONSTANT_ALPHA: 12, 178 ONE_MINUS_CONSTANT_ALPHA: 13, 179 SRC_ALPHA_SATURATE: 14, 180 SRC1_COLOR: 15, 181 ONE_MINUS_SRC1_COLOR: 16, 182 SRC1_ALPHA: 17, 183 ONE_MINUS_SRC1_ALPHA: 18 184 }; 185 186 /** 187 * @constructor 188 */ 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; 197 }; 198 199 /** 200 * @constructor 201 */ 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; 206 }; 207 208 /** 209 * @param {(Array<number>|number)} left_ 210 * @param {number=} bottom_ 211 * @param {number=} width_ 212 * @param {number=} height_ 213 * @constructor 214 */ 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]; 222 } else { 223 this.left = left_; 224 this.bottom = bottom_; 225 this.width = width_; 226 this.height = height_; 227 } 228 }; 229 230 /** 231 * @constructor 232 */ 233 rrRenderState.FragmentOperationState = function() { 234 /** @type {boolean} */ this.scissorTestEnabled = false; 235 /** @type {rrRenderState.WindowRectangle} */ this.scissorRectangle = new rrRenderState.WindowRectangle(0, 0, 1, 1); 236 237 /** @type {boolean} */ this.stencilTestEnabled = false; 238 239 /** @type {Array<rrRenderState.StencilState>} */ this.stencilStates = []; 240 for (var type in rrDefs.FaceType) 241 this.stencilStates[rrDefs.FaceType[type]] = new rrRenderState.StencilState(); 242 243 /** @type {boolean} */ this.depthTestEnabled = false; 244 /** @type {rrRenderState.TestFunc} */ this.depthFunc = rrRenderState.TestFunc.LESS; 245 /** @type {boolean} */ this.depthMask = true; 246 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; 252 253 /** @type {boolean} */ this.sRGBEnabled = true; 254 255 /** @type {boolean} */ this.depthClampEnabled = false; 256 257 /** @type {boolean} */ this.polygonOffsetEnabled = false; 258 /** @type {number} */ this.polygonOffsetFactor = 0.0; 259 /** @type {number} */ this.polygonOffsetUnits = 0.0; 260 261 /** @type {Array<boolean>} */ this.colorMask = [true, true, true, true]; 262 263 /** @type {number} */ this.numStencilBits = 8; 264 }; 265 266 /** 267 * @constructor 268 */ 269 rrRenderState.PointState = function() { 270 /** @type {number} */ this.pointSize = 1.0; 271 }; 272 273 /** 274 * @constructor 275 */ 276 rrRenderState.LineState = function() { 277 /** @type {number} */ this.lineWidth = 1.0; 278 }; 279 280 /** 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_ 284 * @constructor 285 */ 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; 290 291 if (rect_.raw) { 292 this.rect = new rrRenderState.WindowRectangle(0, 0, rect_.raw().getHeight(), 293 rect_.raw().getDepth()); 294 } else { 295 this.rect = /** @type {rrRenderState.WindowRectangle} */ (rect_); 296 } 297 }; 298 299 /** 300 * @constructor 301 */ 302 rrRenderState.RestartState = function() { 303 /** @type {boolean} */ this.enabled = false; 304 /** @type {number} */ this.restartIndex = 0xFFFFFFFF; 305 }; 306 307 /** 308 * @constructor 309 * @param {rrRenderState.ViewportState} viewport_ 310 */ 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_; 315 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(); 321 }; 322 323 });