|
@@ -51,27 +51,38 @@ function compare(renderData, referenceCanvas) {
|
|
|
return (differencesCount * 100) / (width * height) > errorRatio;
|
|
|
}
|
|
|
|
|
|
-function getRenderData(canvas, engine) {
|
|
|
+async function getRenderData(canvas, engine) {
|
|
|
var width = canvas.width;
|
|
|
var height = canvas.height;
|
|
|
|
|
|
- var renderData = engine.readPixels(0, 0, width, height);
|
|
|
- var numberOfChannelsByLine = width * 4;
|
|
|
- var halfHeight = height / 2;
|
|
|
-
|
|
|
- for (var i = 0; i < halfHeight; i++) {
|
|
|
- for (var j = 0; j < numberOfChannelsByLine; j++) {
|
|
|
- var currentCell = j + i * numberOfChannelsByLine;
|
|
|
- var targetLine = height - i - 1;
|
|
|
- var targetCell = j + targetLine * numberOfChannelsByLine;
|
|
|
-
|
|
|
- var temp = renderData[currentCell];
|
|
|
- renderData[currentCell] = renderData[targetCell];
|
|
|
- renderData[targetCell] = temp;
|
|
|
- }
|
|
|
- }
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ engine.onEndFrameObservable.addOnce(async () => {
|
|
|
+ var renderData = await engine.readPixels(0, 0, width, height);
|
|
|
+ var numberOfChannelsByLine = width * 4;
|
|
|
+ var halfHeight = height / 2;
|
|
|
+
|
|
|
+ for (var i = 0; i < halfHeight; i++) {
|
|
|
+ for (var j = 0; j < numberOfChannelsByLine; j++) {
|
|
|
+ var currentCell = j + i * numberOfChannelsByLine;
|
|
|
+ var targetLine = height - i - 1;
|
|
|
+ var targetCell = j + targetLine * numberOfChannelsByLine;
|
|
|
+
|
|
|
+ var temp = renderData[currentCell];
|
|
|
+ renderData[currentCell] = renderData[targetCell];
|
|
|
+ renderData[targetCell] = temp;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (engine.isWebGPU) {
|
|
|
+ for (var i = 0; i < width * height * 4; i += 4) {
|
|
|
+ var temp = renderData[i + 0];
|
|
|
+ renderData[i + 0] = renderData[i + 2];
|
|
|
+ renderData[i + 2] = temp;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- return renderData;
|
|
|
+ resolve(renderData);
|
|
|
+ });
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
function saveRenderImage(data, canvas) {
|
|
@@ -106,9 +117,9 @@ function downloadDataUrlFromJavascript(filename, dataUrl) {
|
|
|
document.body.removeChild(link);
|
|
|
}
|
|
|
|
|
|
-function evaluate(test, resultCanvas, result, renderImage, index, waitRing, done) {
|
|
|
+async function evaluate(test, resultCanvas, result, renderImage, index, waitRing, done) {
|
|
|
seed = 100000;
|
|
|
- var renderData = getRenderData(currentViewer.canvas, currentViewer.engine);
|
|
|
+ var renderData = await getRenderData(currentViewer.canvas, currentViewer.engine);
|
|
|
var testRes = true;
|
|
|
|
|
|
// gl check
|