tor-browser

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

sglrReferenceUtils.js (14193B)


      1 /*-------------------------------------------------------------------------
      2 * drawElements Quality Program OpenGL ES Utilities
      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 context utils
     22 *//*--------------------------------------------------------------------*/
     23 
     24 'use strict';
     25 goog.provide('framework.opengl.simplereference.sglrReferenceUtils');
     26 goog.require('framework.common.tcuFloat');
     27 goog.require('framework.delibs.debase.deMath');
     28 goog.require('framework.referencerenderer.rrDefs');
     29 goog.require('framework.referencerenderer.rrGenericVector');
     30 goog.require('framework.referencerenderer.rrRenderState');
     31 goog.require('framework.referencerenderer.rrRenderer');
     32 goog.require('framework.referencerenderer.rrShaders');
     33 goog.require('framework.referencerenderer.rrVertexAttrib');
     34 
     35 goog.scope(function() {
     36 
     37    var sglrReferenceUtils = framework.opengl.simplereference.sglrReferenceUtils;
     38    var deMath = framework.delibs.debase.deMath;
     39    var tcuFloat = framework.common.tcuFloat;
     40    var rrGenericVector = framework.referencerenderer.rrGenericVector;
     41    var rrVertexAttrib = framework.referencerenderer.rrVertexAttrib;
     42    var rrRenderer = framework.referencerenderer.rrRenderer;
     43    var rrDefs = framework.referencerenderer.rrDefs;
     44    var rrShaders = framework.referencerenderer.rrShaders;
     45    var rrRenderState = framework.referencerenderer.rrRenderState;
     46 
     47    /**
     48    * @param {number} type (32-bit, unsigend)
     49    * @return {rrVertexAttrib.VertexAttribType}
     50    * @throws {Error}
     51    */
     52    sglrReferenceUtils.mapGLPureIntegerVertexAttributeType = function(type) {
     53        switch (type) {
     54            case gl.UNSIGNED_BYTE: return rrVertexAttrib.VertexAttribType.PURE_UINT8;
     55            case gl.UNSIGNED_SHORT: return rrVertexAttrib.VertexAttribType.PURE_UINT16;
     56            case gl.UNSIGNED_INT: return rrVertexAttrib.VertexAttribType.PURE_UINT32;
     57            case gl.BYTE: return rrVertexAttrib.VertexAttribType.PURE_INT8;
     58            case gl.SHORT: return rrVertexAttrib.VertexAttribType.PURE_INT16;
     59            case gl.INT: return rrVertexAttrib.VertexAttribType.PURE_INT32;
     60            default:
     61                throw new Error('Value to do mapping not compatible');
     62        }
     63    };
     64 
     65    /**
     66    * @param {number} type (32-bit, unsigend)
     67    * @param {boolean} normalizedInteger
     68    * @param {number} size
     69    * @return {rrVertexAttrib.VertexAttribType} converted value from type to VertexAttribType
     70    * @throws {Error}
     71    */
     72    sglrReferenceUtils.mapGLFloatVertexAttributeType = function(type, normalizedInteger, size) {
     73 
     74        /** @type {boolean} */ var useClampingNormalization = true;
     75 
     76        switch (type) {
     77            case gl.FLOAT:
     78                return rrVertexAttrib.VertexAttribType.FLOAT;
     79            case gl.HALF_FLOAT:
     80                return rrVertexAttrib.VertexAttribType.HALF;
     81            /* Not supported in WebGL 1/2 case gl.FIXED:
     82                return rrVertexAttrib.VertexAttribType.FIXED;
     83            case gl.DOUBLE:
     84                return rrVertexAttrib.VertexAttribType.DOUBLE; */
     85            case gl.UNSIGNED_BYTE:
     86                if (!normalizedInteger)
     87                    return rrVertexAttrib.VertexAttribType.NONPURE_UINT8;
     88                else
     89                    return rrVertexAttrib.VertexAttribType.NONPURE_UNORM8;
     90 
     91            case gl.UNSIGNED_SHORT:
     92                if (!normalizedInteger)
     93                    return rrVertexAttrib.VertexAttribType.NONPURE_UINT16;
     94                else
     95                    return rrVertexAttrib.VertexAttribType.NONPURE_UNORM16;
     96 
     97            case gl.UNSIGNED_INT:
     98                if (!normalizedInteger)
     99                    return rrVertexAttrib.VertexAttribType.NONPURE_UINT32;
    100                else
    101                    return rrVertexAttrib.VertexAttribType.NONPURE_UNORM32;
    102 
    103            case gl.UNSIGNED_INT_2_10_10_10_REV:
    104                if (!normalizedInteger)
    105                    return rrVertexAttrib.VertexAttribType.NONPURE_UINT_2_10_10_10_REV;
    106                else
    107                    return rrVertexAttrib.VertexAttribType.NONPURE_UNORM_2_10_10_10_REV;
    108 
    109            case gl.BYTE:
    110                if (!normalizedInteger)
    111                    return rrVertexAttrib.VertexAttribType.NONPURE_INT8;
    112                else if (useClampingNormalization)
    113                    return rrVertexAttrib.VertexAttribType.NONPURE_SNORM8_CLAMP;
    114                else
    115                    return rrVertexAttrib.VertexAttribType.NONPURE_SNORM8_SCALE;
    116 
    117            case gl.SHORT:
    118                if (!normalizedInteger)
    119                    return rrVertexAttrib.VertexAttribType.NONPURE_INT16;
    120                else if (useClampingNormalization)
    121                    return rrVertexAttrib.VertexAttribType.NONPURE_SNORM16_CLAMP;
    122                else
    123                    return rrVertexAttrib.VertexAttribType.NONPURE_SNORM16_SCALE;
    124 
    125            case gl.INT:
    126                if (!normalizedInteger)
    127                    return rrVertexAttrib.VertexAttribType.NONPURE_INT32;
    128                else if (useClampingNormalization)
    129                    return rrVertexAttrib.VertexAttribType.NONPURE_SNORM32_CLAMP;
    130                else
    131                    return rrVertexAttrib.VertexAttribType.NONPURE_SNORM32_SCALE;
    132 
    133            case gl.INT_2_10_10_10_REV:
    134                if (!normalizedInteger)
    135                    return rrVertexAttrib.VertexAttribType.NONPURE_INT_2_10_10_10_REV;
    136                else if (useClampingNormalization)
    137                    return rrVertexAttrib.VertexAttribType.NONPURE_SNORM_2_10_10_10_REV_CLAMP;
    138                else
    139                    return rrVertexAttrib.VertexAttribType.NONPURE_SNORM_2_10_10_10_REV_SCALE;
    140 
    141            default:
    142                throw new Error('Value to do mapping not compatible');
    143 
    144        }
    145 
    146    };
    147 
    148    /**
    149    * @param {number} size
    150    * @return {number}
    151    * @throws {Error}
    152    */
    153    sglrReferenceUtils.mapGLSize = function(size) {
    154        switch (size) {
    155            case 1: return 1;
    156            case 2: return 2;
    157            case 3: return 3;
    158            case 4: return 4;
    159            /* NOT in GL
    160            case gl.BGRA: return 4;
    161            */
    162 
    163            default:
    164                throw new Error('Value to do mapping not compatible');
    165        }
    166    };
    167 
    168    /**
    169    * @param {number} type (32-bit, unsigned)
    170    * @return {rrRenderer.PrimitiveType}
    171    * @throws {Error}
    172    */
    173    sglrReferenceUtils.mapGLPrimitiveType = function(type) {
    174        switch (type) {
    175            case gl.TRIANGLES: return rrRenderer.PrimitiveType.TRIANGLES;
    176            case gl.TRIANGLE_STRIP: return rrRenderer.PrimitiveType.TRIANGLE_STRIP;
    177            case gl.TRIANGLE_FAN: return rrRenderer.PrimitiveType.TRIANGLE_FAN;
    178            case gl.LINES: return rrRenderer.PrimitiveType.LINES;
    179            case gl.LINE_STRIP: return rrRenderer.PrimitiveType.LINE_STRIP;
    180            case gl.LINE_LOOP: return rrRenderer.PrimitiveType.LINE_LOOP;
    181            case gl.POINTS: return rrRenderer.PrimitiveType.POINTS;
    182 
    183            default:
    184                throw new Error('Value to do mapping not compatible');
    185        }
    186    };
    187 
    188    /**
    189    * @param {number} type (32-bit, unsigned)
    190    * @return {rrDefs.IndexType}
    191    * @throws {Error}
    192    */
    193    sglrReferenceUtils.mapGLIndexType = function(type) {
    194        switch (type) {
    195            case gl.UNSIGNED_BYTE: return rrDefs.IndexType.INDEXTYPE_UINT8;
    196            case gl.UNSIGNED_SHORT: return rrDefs.IndexType.INDEXTYPE_UINT16;
    197            case gl.UNSIGNED_INT: return rrDefs.IndexType.INDEXTYPE_UINT32;
    198            default:
    199                throw new Error('Value to do mapping not compatible');
    200        }
    201    };
    202 
    203    /**
    204    * @param {number} func (deUint32)
    205    * @return {rrRenderState.TestFunc}
    206    * @throws {Error}
    207    */
    208    sglrReferenceUtils.mapGLTestFunc = function(func) {
    209        switch (func) {
    210            case gl.ALWAYS: return rrRenderState.TestFunc.ALWAYS;
    211            case gl.EQUAL: return rrRenderState.TestFunc.EQUAL;
    212            case gl.GEQUAL: return rrRenderState.TestFunc.GEQUAL;
    213            case gl.GREATER: return rrRenderState.TestFunc.GREATER;
    214            case gl.LEQUAL: return rrRenderState.TestFunc.LEQUAL;
    215            case gl.LESS: return rrRenderState.TestFunc.LESS;
    216            case gl.NEVER: return rrRenderState.TestFunc.NEVER;
    217            case gl.NOTEQUAL: return rrRenderState.TestFunc.NOTEQUAL;
    218            default:
    219                throw new Error('Value to do mapping not compatible');
    220        }
    221    };
    222 
    223    /**
    224    * @param {number} op (deUint32)
    225    * @return {rrRenderState.StencilOp}
    226    * @throws {Error}
    227    */
    228    sglrReferenceUtils.mapGLStencilOp = function(op) {
    229        switch (op) {
    230            case gl.KEEP: return rrRenderState.StencilOp.KEEP;
    231            case gl.ZERO: return rrRenderState.StencilOp.ZERO;
    232            case gl.REPLACE: return rrRenderState.StencilOp.REPLACE;
    233            case gl.INCR: return rrRenderState.StencilOp.INCR;
    234            case gl.DECR: return rrRenderState.StencilOp.DECR;
    235            case gl.INCR_WRAP: return rrRenderState.StencilOp.INCR_WRAP;
    236            case gl.DECR_WRAP: return rrRenderState.StencilOp.DECR_WRAP;
    237            case gl.INVERT: return rrRenderState.StencilOp.INVERT;
    238            default:
    239                throw new Error('Value to do mapping not compatible');
    240        }
    241    };
    242 
    243    /**
    244    * @param {number} equation (deUint32)
    245    * @return {rrRenderState.BlendEquation}
    246    * @throws {Error}
    247    */
    248    sglrReferenceUtils.mapGLBlendEquation = function(equation) {
    249        switch (equation) {
    250            case gl.FUNC_ADD: return rrRenderState.BlendEquation.ADD;
    251            case gl.FUNC_SUBTRACT: return rrRenderState.BlendEquation.SUBTRACT;
    252            case gl.FUNC_REVERSE_SUBTRACT: return rrRenderState.BlendEquation.REVERSE_SUBTRACT;
    253            case gl.MIN: return rrRenderState.BlendEquation.MIN;
    254            case gl.MAX: return rrRenderState.BlendEquation.MAX;
    255            default:
    256                throw new Error('Value to do mapping not compatible');
    257        }
    258    };
    259 
    260    /**
    261    * @param {number} equation (deUint32)
    262    * @return {rrRenderState.BlendEquationAdvanced}
    263    * @throws {Error}
    264    */
    265    /*sglrReferenceUtils.mapGLBlendEquationAdvanced = function(equation) {
    266        switch (equation) {
    267            case gl.MULTIPLY_KHR: return rrRenderState.BlendEquationAdvanced.MULTIPLY;
    268            case gl.SCREEN_KHR: return rrRenderState.BlendEquationAdvanced.SCREEN;
    269            case gl.OVERLAY_KHR: return rrRenderState.BlendEquationAdvanced.OVERLAY;
    270            case gl.DARKEN_KHR: return rrRenderState.BlendEquationAdvanced.DARKEN;
    271            case gl.LIGHTEN_KHR: return rrRenderState.BlendEquationAdvanced.LIGHTEN;
    272            case gl.COLORDODGE_KHR: return rrRenderState.BlendEquationAdvanced.COLORDODGE;
    273            case gl.COLORBURN_KHR: return rrRenderState.BlendEquationAdvanced.COLORBURN;
    274            case gl.HARDLIGHT_KHR: return rrRenderState.BlendEquationAdvanced.HARDLIGHT;
    275            case gl.SOFTLIGHT_KHR: return rrRenderState.BlendEquationAdvanced.SOFTLIGHT;
    276            case gl.DIFFERENCE_KHR: return rrRenderState.BlendEquationAdvanced.DIFFERENCE;
    277            case gl.EXCLUSION_KHR: return rrRenderState.BlendEquationAdvanced.EXCLUSION;
    278            case gl.HSL_HUE_KHR: return rrRenderState.BlendEquationAdvanced.HSL_HUE;
    279            case gl.HSL_SATURATION_KHR: return rrRenderState.BlendEquationAdvanced.HSL_SATURATION;
    280            case gl.HSL_COLOR_KHR: return rrRenderState.BlendEquationAdvanced.HSL_COLOR;
    281            case gl.HSL_LUMINOSITY_KHR: return rrRenderState.BlendEquationAdvanced.HSL_LUMINOSITY;
    282            default:
    283                throw new Error("Value to do mapping not compatible");
    284        }
    285    };*/
    286 
    287    /**
    288    * @param {number} func (deUint32)
    289    * @return {rrRenderState.BlendFunc}
    290    * @throws {Error}
    291    */
    292    sglrReferenceUtils.mapGLBlendFunc = function(func) {
    293        switch (func) {
    294            case gl.ZERO: return rrRenderState.BlendFunc.ZERO;
    295            case gl.ONE: return rrRenderState.BlendFunc.ONE;
    296            case gl.SRC_COLOR: return rrRenderState.BlendFunc.SRC_COLOR;
    297            case gl.ONE_MINUS_SRC_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_SRC_COLOR;
    298            case gl.DST_COLOR: return rrRenderState.BlendFunc.DST_COLOR;
    299            case gl.ONE_MINUS_DST_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_DST_COLOR;
    300            case gl.SRC_ALPHA: return rrRenderState.BlendFunc.SRC_ALPHA;
    301            case gl.ONE_MINUS_SRC_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_SRC_ALPHA;
    302            case gl.DST_ALPHA: return rrRenderState.BlendFunc.DST_ALPHA;
    303            case gl.ONE_MINUS_DST_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_DST_ALPHA;
    304            case gl.CONSTANT_COLOR: return rrRenderState.BlendFunc.CONSTANT_COLOR;
    305            case gl.ONE_MINUS_CONSTANT_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_CONSTANT_COLOR;
    306            case gl.CONSTANT_ALPHA: return rrRenderState.BlendFunc.CONSTANT_ALPHA;
    307            case gl.ONE_MINUS_CONSTANT_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_CONSTANT_ALPHA;
    308            case gl.SRC_ALPHA_SATURATE: return rrRenderState.BlendFunc.SRC_ALPHA_SATURATE;
    309    //         case gl.SRC1_COLOR: return rrRenderState.BlendFunc.SRC1_COLOR;
    310    //         case gl.ONE_MINUS_SRC1_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_SRC1_COLOR;
    311    //         case gl.SRC1_ALPHA: return rrRenderState.BlendFunc.SRC1_ALPHA;
    312    //         case gl.ONE_MINUS_SRC1_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_SRC1_ALPHA;
    313            default:
    314                throw new Error('Value to do mapping not compatible');
    315        }
    316    };
    317 });