tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });