summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSurface.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSurface.js184
1 files changed, 184 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSurface.js b/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSurface.js
new file mode 100644
index 0000000000..47d3634aad
--- /dev/null
+++ b/dom/canvas/test/webgl-conf/checkout/deqp/framework/common/tcuSurface.js
@@ -0,0 +1,184 @@
+/*-------------------------------------------------------------------------
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.
+ *
+ */
+
+'use strict';
+goog.provide('framework.common.tcuSurface');
+goog.require('framework.common.tcuTexture');
+goog.require('framework.delibs.debase.deMath');
+goog.require('framework.opengl.gluTextureUtil');
+
+goog.scope(function() {
+
+var tcuSurface = framework.common.tcuSurface;
+var tcuTexture = framework.common.tcuTexture;
+var deMath = framework.delibs.debase.deMath;
+var gluTextureUtil = framework.opengl.gluTextureUtil;
+
+var DE_ASSERT = function(x) {
+ if (!x)
+ throw new Error('Assert failed');
+};
+
+/**
+ * \brief RGBA8888 surface
+ *
+ * tcuSurface.Surface provides basic pixel storage functionality. Only single format
+ * (RGBA8888) is supported.
+ *
+ * PixelBufferAccess (see tcuTexture.h) provides much more flexible API
+ * for handling various pixel formats. This is mainly a convinience class.
+ * @constructor
+ * @param {number=} width
+ * @param {number=} height
+ */
+tcuSurface.Surface = function(width, height) {
+ width = width || 0;
+ height = height || 0;
+ this.setSize(width, height);
+};
+
+/**
+ * @param {number} width
+ * @param {number} height
+ */
+tcuSurface.Surface.prototype.setSize = function(width, height) {
+ this.m_width = width;
+ this.m_height = height;
+ if (width * height > 0) {
+ this.m_data = new ArrayBuffer(4 * width * height);
+ this.m_pixels = new Uint8Array(this.m_data);
+ } else {
+ this.m_data = null;
+ this.m_pixels = null;
+ }
+};
+
+/**
+ * @return {number}
+ */
+tcuSurface.Surface.prototype.getWidth = function() { return this.m_width; };
+
+/**
+ * @return {number}
+ */
+tcuSurface.Surface.prototype.getHeight = function() { return this.m_height; };
+
+/**
+ * @param {number} x
+ * @param {number} y
+ * @param {Array<number>} color Vec4 color
+ */
+tcuSurface.Surface.prototype.setPixel = function(x, y, color) {
+ DE_ASSERT(deMath.deInBounds32(x, 0, this.m_width));
+ DE_ASSERT(deMath.deInBounds32(y, 0, this.m_height));
+
+ var offset = 4 * (x + y * this.m_width);
+ for (var i = 0; i < 4; i++)
+ this.m_pixels[offset + i] = color[i];
+};
+
+/**
+ * @param {number} x
+ * @param {number} y
+ * @return {Array<number>}
+ */
+tcuSurface.Surface.prototype.getPixel = function(x, y) {
+ DE_ASSERT(deMath.deInBounds32(x, 0, this.m_width));
+ DE_ASSERT(deMath.deInBounds32(y, 0, this.m_height));
+
+ var color = [];
+ color.length = 4;
+
+ var offset = 4 * (x + y * this.m_width);
+ for (var i = 0; i < 4; i++)
+ color[i] = this.m_pixels[offset + i];
+
+ return color;
+};
+
+/**
+ * @param {number} x
+ * @param {number} y
+ * @return {number}
+ */
+tcuSurface.Surface.prototype.getPixelUintRGB8 = function(x, y) {
+ DE_ASSERT(deMath.deInBounds32(x, 0, this.m_width));
+ DE_ASSERT(deMath.deInBounds32(y, 0, this.m_height));
+
+ var offset = 4 * (x + y * this.m_width);
+ return (this.m_pixels[offset] << 16) +
+ (this.m_pixels[offset + 1] << 8) +
+ this.m_pixels[offset + 2];
+};
+
+/**
+ * Read the viewport contents into this surface
+ * @param {*=} ctx WebGL or ref context
+ * @param {(Array<number>|{x: number, y: number, width: number, height: number})=} view
+ */
+tcuSurface.Surface.prototype.readViewport = function(ctx, view) {
+ ctx = ctx || gl;
+ var v = view || /** @type {Array<number>} */ (ctx.getParameter(gl.VIEWPORT));
+ /** @type {number} */ var x;
+ /** @type {number} */ var y;
+ /** @type {number} */ var width;
+ /** @type {number} */ var height;
+ if (v instanceof Array || ArrayBuffer.isView(v)) {
+ x = v[0];
+ y = v[1];
+ width = v[2];
+ height = v[3];
+ } else {
+ x = v.x;
+ y = v.y;
+ width = v.width;
+ height = v.height;
+ }
+ if (width != this.m_width || height != this.m_height)
+ this.setSize(width, height);
+ ctx.readPixels(x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, this.m_pixels);
+};
+
+/**
+ * @return {Uint8Array}
+ */
+tcuSurface.Surface.prototype.getPixels = function() { return this.m_pixels || null; };
+
+/**
+ * @return {tcuTexture.PixelBufferAccess} Pixel Buffer Access object
+ */
+tcuSurface.Surface.prototype.getAccess = function() {
+ return new tcuTexture.PixelBufferAccess({
+ format: new tcuTexture.TextureFormat(tcuTexture.ChannelOrder.RGBA, tcuTexture.ChannelType.UNORM_INT8),
+ width: this.m_width,
+ height: this.m_height,
+ data: this.m_data
+ });
+
+};
+
+tcuSurface.Surface.prototype.getSubAccess = function(x, y, width, height) {
+ /* TODO: Implement. the deqp getSubAccess() looks broken. It will probably fail if
+ * x != 0 or width != m_width
+ */
+ throw new Error('Unimplemented');
+};
+
+});