69 lines
2.3 KiB
JavaScript
69 lines
2.3 KiB
JavaScript
/*
|
|
Copyright (c) 2019 The Khronos Group Inc.
|
|
Use of this source code is governed by an MIT-style license that can be
|
|
found in the LICENSE.txt file.
|
|
*/
|
|
|
|
// This file contains utilities shared between tests for the WEBGL_draw_buffers extension and multiple draw buffers functionality in WebGL 2.0.
|
|
|
|
'use strict';
|
|
|
|
var WebGLDrawBuffersUtils = function(gl, ext) {
|
|
|
|
var getMaxUsableColorAttachments = function() {
|
|
var maxDrawingBuffers;
|
|
var maxColorAttachments;
|
|
if (ext) {
|
|
// EXT_draw_buffers
|
|
maxDrawingBuffers = gl.getParameter(ext.MAX_DRAW_BUFFERS_WEBGL);
|
|
maxColorAttachments = gl.getParameter(ext.MAX_COLOR_ATTACHMENTS_WEBGL);
|
|
} else {
|
|
// WebGL 2.0
|
|
maxDrawingBuffers = gl.getParameter(gl.MAX_DRAW_BUFFERS);
|
|
maxColorAttachments = gl.getParameter(gl.MAX_COLOR_ATTACHMENTS);
|
|
}
|
|
var maxUniformVectors = gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);
|
|
return Math.min(maxDrawingBuffers, maxColorAttachments, maxUniformVectors);
|
|
};
|
|
|
|
var makeColorAttachmentArray = function(size) {
|
|
var array = []
|
|
for (var ii = 0; ii < size; ++ii) {
|
|
array.push(gl.COLOR_ATTACHMENT0 + ii);
|
|
}
|
|
return array;
|
|
}
|
|
|
|
var checkProgram = wtu.setupTexturedQuad(gl);
|
|
|
|
var checkAttachmentsForColorFn = function(attachments, colorFn) {
|
|
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
gl.useProgram(checkProgram);
|
|
attachments.forEach(function(attachment, index) {
|
|
gl.bindTexture(gl.TEXTURE_2D, attachment.texture);
|
|
wtu.clearAndDrawUnitQuad(gl);
|
|
var expectedColor = colorFn(attachment, index);
|
|
var tolerance = 0;
|
|
expectedColor.forEach(function(v) {
|
|
if (v != 0 && v != 255) {
|
|
tolerance = 8;
|
|
}
|
|
});
|
|
wtu.checkCanvas(gl, expectedColor, "attachment " + index + " should be " + expectedColor.toString(), tolerance);
|
|
});
|
|
debug("");
|
|
};
|
|
|
|
var checkAttachmentsForColor = function(attachments, color) {
|
|
checkAttachmentsForColorFn(attachments, function(attachment, index) {
|
|
return color || attachment.color;
|
|
});
|
|
};
|
|
|
|
return {
|
|
getMaxUsableColorAttachments: getMaxUsableColorAttachments,
|
|
makeColorAttachmentArray: makeColorAttachmentArray,
|
|
checkAttachmentsForColorFn: checkAttachmentsForColorFn,
|
|
checkAttachmentsForColor: checkAttachmentsForColor
|
|
};
|
|
};
|