Source code
Revision control
Copy as Markdown
Other Tools
/*-------------------------------------------------------------------------
* drawElements Quality Program OpenGL ES Utilities
* ------------------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*//*!
* \file
* \brief Reference context utils
*//*--------------------------------------------------------------------*/
'use strict';
goog.provide('framework.opengl.simplereference.sglrReferenceUtils');
goog.require('framework.common.tcuFloat');
goog.require('framework.delibs.debase.deMath');
goog.require('framework.referencerenderer.rrDefs');
goog.require('framework.referencerenderer.rrGenericVector');
goog.require('framework.referencerenderer.rrRenderState');
goog.require('framework.referencerenderer.rrRenderer');
goog.require('framework.referencerenderer.rrShaders');
goog.require('framework.referencerenderer.rrVertexAttrib');
goog.scope(function() {
var sglrReferenceUtils = framework.opengl.simplereference.sglrReferenceUtils;
var deMath = framework.delibs.debase.deMath;
var tcuFloat = framework.common.tcuFloat;
var rrGenericVector = framework.referencerenderer.rrGenericVector;
var rrVertexAttrib = framework.referencerenderer.rrVertexAttrib;
var rrRenderer = framework.referencerenderer.rrRenderer;
var rrDefs = framework.referencerenderer.rrDefs;
var rrShaders = framework.referencerenderer.rrShaders;
var rrRenderState = framework.referencerenderer.rrRenderState;
/**
* @param {number} type (32-bit, unsigend)
* @return {rrVertexAttrib.VertexAttribType}
* @throws {Error}
*/
sglrReferenceUtils.mapGLPureIntegerVertexAttributeType = function(type) {
switch (type) {
case gl.UNSIGNED_BYTE: return rrVertexAttrib.VertexAttribType.PURE_UINT8;
case gl.UNSIGNED_SHORT: return rrVertexAttrib.VertexAttribType.PURE_UINT16;
case gl.UNSIGNED_INT: return rrVertexAttrib.VertexAttribType.PURE_UINT32;
case gl.BYTE: return rrVertexAttrib.VertexAttribType.PURE_INT8;
case gl.SHORT: return rrVertexAttrib.VertexAttribType.PURE_INT16;
case gl.INT: return rrVertexAttrib.VertexAttribType.PURE_INT32;
default:
throw new Error('Value to do mapping not compatible');
}
};
/**
* @param {number} type (32-bit, unsigend)
* @param {boolean} normalizedInteger
* @param {number} size
* @return {rrVertexAttrib.VertexAttribType} converted value from type to VertexAttribType
* @throws {Error}
*/
sglrReferenceUtils.mapGLFloatVertexAttributeType = function(type, normalizedInteger, size) {
/** @type {boolean} */ var useClampingNormalization = true;
switch (type) {
case gl.FLOAT:
return rrVertexAttrib.VertexAttribType.FLOAT;
case gl.HALF_FLOAT:
return rrVertexAttrib.VertexAttribType.HALF;
/* Not supported in WebGL 1/2 case gl.FIXED:
return rrVertexAttrib.VertexAttribType.FIXED;
case gl.DOUBLE:
return rrVertexAttrib.VertexAttribType.DOUBLE; */
case gl.UNSIGNED_BYTE:
if (!normalizedInteger)
return rrVertexAttrib.VertexAttribType.NONPURE_UINT8;
else
return rrVertexAttrib.VertexAttribType.NONPURE_UNORM8;
case gl.UNSIGNED_SHORT:
if (!normalizedInteger)
return rrVertexAttrib.VertexAttribType.NONPURE_UINT16;
else
return rrVertexAttrib.VertexAttribType.NONPURE_UNORM16;
case gl.UNSIGNED_INT:
if (!normalizedInteger)
return rrVertexAttrib.VertexAttribType.NONPURE_UINT32;
else
return rrVertexAttrib.VertexAttribType.NONPURE_UNORM32;
case gl.UNSIGNED_INT_2_10_10_10_REV:
if (!normalizedInteger)
return rrVertexAttrib.VertexAttribType.NONPURE_UINT_2_10_10_10_REV;
else
return rrVertexAttrib.VertexAttribType.NONPURE_UNORM_2_10_10_10_REV;
case gl.BYTE:
if (!normalizedInteger)
return rrVertexAttrib.VertexAttribType.NONPURE_INT8;
else if (useClampingNormalization)
return rrVertexAttrib.VertexAttribType.NONPURE_SNORM8_CLAMP;
else
return rrVertexAttrib.VertexAttribType.NONPURE_SNORM8_SCALE;
case gl.SHORT:
if (!normalizedInteger)
return rrVertexAttrib.VertexAttribType.NONPURE_INT16;
else if (useClampingNormalization)
return rrVertexAttrib.VertexAttribType.NONPURE_SNORM16_CLAMP;
else
return rrVertexAttrib.VertexAttribType.NONPURE_SNORM16_SCALE;
case gl.INT:
if (!normalizedInteger)
return rrVertexAttrib.VertexAttribType.NONPURE_INT32;
else if (useClampingNormalization)
return rrVertexAttrib.VertexAttribType.NONPURE_SNORM32_CLAMP;
else
return rrVertexAttrib.VertexAttribType.NONPURE_SNORM32_SCALE;
case gl.INT_2_10_10_10_REV:
if (!normalizedInteger)
return rrVertexAttrib.VertexAttribType.NONPURE_INT_2_10_10_10_REV;
else if (useClampingNormalization)
return rrVertexAttrib.VertexAttribType.NONPURE_SNORM_2_10_10_10_REV_CLAMP;
else
return rrVertexAttrib.VertexAttribType.NONPURE_SNORM_2_10_10_10_REV_SCALE;
default:
throw new Error('Value to do mapping not compatible');
}
};
/**
* @param {number} size
* @return {number}
* @throws {Error}
*/
sglrReferenceUtils.mapGLSize = function(size) {
switch (size) {
case 1: return 1;
case 2: return 2;
case 3: return 3;
case 4: return 4;
/* NOT in GL
case gl.BGRA: return 4;
*/
default:
throw new Error('Value to do mapping not compatible');
}
};
/**
* @param {number} type (32-bit, unsigned)
* @return {rrRenderer.PrimitiveType}
* @throws {Error}
*/
sglrReferenceUtils.mapGLPrimitiveType = function(type) {
switch (type) {
case gl.TRIANGLES: return rrRenderer.PrimitiveType.TRIANGLES;
case gl.TRIANGLE_STRIP: return rrRenderer.PrimitiveType.TRIANGLE_STRIP;
case gl.TRIANGLE_FAN: return rrRenderer.PrimitiveType.TRIANGLE_FAN;
case gl.LINES: return rrRenderer.PrimitiveType.LINES;
case gl.LINE_STRIP: return rrRenderer.PrimitiveType.LINE_STRIP;
case gl.LINE_LOOP: return rrRenderer.PrimitiveType.LINE_LOOP;
case gl.POINTS: return rrRenderer.PrimitiveType.POINTS;
default:
throw new Error('Value to do mapping not compatible');
}
};
/**
* @param {number} type (32-bit, unsigned)
* @return {rrDefs.IndexType}
* @throws {Error}
*/
sglrReferenceUtils.mapGLIndexType = function(type) {
switch (type) {
case gl.UNSIGNED_BYTE: return rrDefs.IndexType.INDEXTYPE_UINT8;
case gl.UNSIGNED_SHORT: return rrDefs.IndexType.INDEXTYPE_UINT16;
case gl.UNSIGNED_INT: return rrDefs.IndexType.INDEXTYPE_UINT32;
default:
throw new Error('Value to do mapping not compatible');
}
};
/**
* @param {number} func (deUint32)
* @return {rrRenderState.TestFunc}
* @throws {Error}
*/
sglrReferenceUtils.mapGLTestFunc = function(func) {
switch (func) {
case gl.ALWAYS: return rrRenderState.TestFunc.ALWAYS;
case gl.EQUAL: return rrRenderState.TestFunc.EQUAL;
case gl.GEQUAL: return rrRenderState.TestFunc.GEQUAL;
case gl.GREATER: return rrRenderState.TestFunc.GREATER;
case gl.LEQUAL: return rrRenderState.TestFunc.LEQUAL;
case gl.LESS: return rrRenderState.TestFunc.LESS;
case gl.NEVER: return rrRenderState.TestFunc.NEVER;
case gl.NOTEQUAL: return rrRenderState.TestFunc.NOTEQUAL;
default:
throw new Error('Value to do mapping not compatible');
}
};
/**
* @param {number} op (deUint32)
* @return {rrRenderState.StencilOp}
* @throws {Error}
*/
sglrReferenceUtils.mapGLStencilOp = function(op) {
switch (op) {
case gl.KEEP: return rrRenderState.StencilOp.KEEP;
case gl.ZERO: return rrRenderState.StencilOp.ZERO;
case gl.REPLACE: return rrRenderState.StencilOp.REPLACE;
case gl.INCR: return rrRenderState.StencilOp.INCR;
case gl.DECR: return rrRenderState.StencilOp.DECR;
case gl.INCR_WRAP: return rrRenderState.StencilOp.INCR_WRAP;
case gl.DECR_WRAP: return rrRenderState.StencilOp.DECR_WRAP;
case gl.INVERT: return rrRenderState.StencilOp.INVERT;
default:
throw new Error('Value to do mapping not compatible');
}
};
/**
* @param {number} equation (deUint32)
* @return {rrRenderState.BlendEquation}
* @throws {Error}
*/
sglrReferenceUtils.mapGLBlendEquation = function(equation) {
switch (equation) {
case gl.FUNC_ADD: return rrRenderState.BlendEquation.ADD;
case gl.FUNC_SUBTRACT: return rrRenderState.BlendEquation.SUBTRACT;
case gl.FUNC_REVERSE_SUBTRACT: return rrRenderState.BlendEquation.REVERSE_SUBTRACT;
case gl.MIN: return rrRenderState.BlendEquation.MIN;
case gl.MAX: return rrRenderState.BlendEquation.MAX;
default:
throw new Error('Value to do mapping not compatible');
}
};
/**
* @param {number} equation (deUint32)
* @return {rrRenderState.BlendEquationAdvanced}
* @throws {Error}
*/
/*sglrReferenceUtils.mapGLBlendEquationAdvanced = function(equation) {
switch (equation) {
case gl.MULTIPLY_KHR: return rrRenderState.BlendEquationAdvanced.MULTIPLY;
case gl.SCREEN_KHR: return rrRenderState.BlendEquationAdvanced.SCREEN;
case gl.OVERLAY_KHR: return rrRenderState.BlendEquationAdvanced.OVERLAY;
case gl.DARKEN_KHR: return rrRenderState.BlendEquationAdvanced.DARKEN;
case gl.LIGHTEN_KHR: return rrRenderState.BlendEquationAdvanced.LIGHTEN;
case gl.COLORDODGE_KHR: return rrRenderState.BlendEquationAdvanced.COLORDODGE;
case gl.COLORBURN_KHR: return rrRenderState.BlendEquationAdvanced.COLORBURN;
case gl.HARDLIGHT_KHR: return rrRenderState.BlendEquationAdvanced.HARDLIGHT;
case gl.SOFTLIGHT_KHR: return rrRenderState.BlendEquationAdvanced.SOFTLIGHT;
case gl.DIFFERENCE_KHR: return rrRenderState.BlendEquationAdvanced.DIFFERENCE;
case gl.EXCLUSION_KHR: return rrRenderState.BlendEquationAdvanced.EXCLUSION;
case gl.HSL_HUE_KHR: return rrRenderState.BlendEquationAdvanced.HSL_HUE;
case gl.HSL_SATURATION_KHR: return rrRenderState.BlendEquationAdvanced.HSL_SATURATION;
case gl.HSL_COLOR_KHR: return rrRenderState.BlendEquationAdvanced.HSL_COLOR;
case gl.HSL_LUMINOSITY_KHR: return rrRenderState.BlendEquationAdvanced.HSL_LUMINOSITY;
default:
throw new Error("Value to do mapping not compatible");
}
};*/
/**
* @param {number} func (deUint32)
* @return {rrRenderState.BlendFunc}
* @throws {Error}
*/
sglrReferenceUtils.mapGLBlendFunc = function(func) {
switch (func) {
case gl.ZERO: return rrRenderState.BlendFunc.ZERO;
case gl.ONE: return rrRenderState.BlendFunc.ONE;
case gl.SRC_COLOR: return rrRenderState.BlendFunc.SRC_COLOR;
case gl.ONE_MINUS_SRC_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_SRC_COLOR;
case gl.DST_COLOR: return rrRenderState.BlendFunc.DST_COLOR;
case gl.ONE_MINUS_DST_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_DST_COLOR;
case gl.SRC_ALPHA: return rrRenderState.BlendFunc.SRC_ALPHA;
case gl.ONE_MINUS_SRC_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_SRC_ALPHA;
case gl.DST_ALPHA: return rrRenderState.BlendFunc.DST_ALPHA;
case gl.ONE_MINUS_DST_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_DST_ALPHA;
case gl.CONSTANT_COLOR: return rrRenderState.BlendFunc.CONSTANT_COLOR;
case gl.ONE_MINUS_CONSTANT_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_CONSTANT_COLOR;
case gl.CONSTANT_ALPHA: return rrRenderState.BlendFunc.CONSTANT_ALPHA;
case gl.ONE_MINUS_CONSTANT_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_CONSTANT_ALPHA;
case gl.SRC_ALPHA_SATURATE: return rrRenderState.BlendFunc.SRC_ALPHA_SATURATE;
// case gl.SRC1_COLOR: return rrRenderState.BlendFunc.SRC1_COLOR;
// case gl.ONE_MINUS_SRC1_COLOR: return rrRenderState.BlendFunc.ONE_MINUS_SRC1_COLOR;
// case gl.SRC1_ALPHA: return rrRenderState.BlendFunc.SRC1_ALPHA;
// case gl.ONE_MINUS_SRC1_ALPHA: return rrRenderState.BlendFunc.ONE_MINUS_SRC1_ALPHA;
default:
throw new Error('Value to do mapping not compatible');
}
};
});