@antv/g-webgpu-raytracer
Version:
A simple ray tracer implemented with WebGPU
65 lines (58 loc) • 2.24 kB
JavaScript
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
import _createClass from "@babel/runtime/helpers/createClass";
import { vec3 } from 'gl-matrix';
export var Mesh = /*#__PURE__*/function () {
_createClass(Mesh, null, [{
key: "createMeshesBuffer",
// int offset; 4 bytes
// int triangle_count; 4 bytes
// 8 bytes padding
// vec3 diffuseColor; 12 bytes
// 4 bytes padding
// vec3 emission; 12 bytes
// 4 bytes padding
// total : 48
//
// Rounded up to 16 byte padding
//
// total : 48
//
// See why padding is required here:
// https://twitter.com/9ballsyndrome/status/1178039885090848770
// https://www.khronos.org/registry/OpenGL/specs/es/3.1/es_spec_3.1.pdf "7.6.2.2 Standard Uniform Block Layout" [1-10]
value: function createMeshesBuffer(meshes) {
var buffer = new ArrayBuffer(meshes.length * Mesh.Padding);
var int32Data = new Int32Array(buffer);
var float32Data = new Float32Array(buffer);
var padding = Mesh.Padding / 4;
for (var index = 0; index < meshes.length; index++) {
var element = meshes[index];
int32Data[padding * index] = element.offset;
int32Data[padding * index + 1] = element.triangleCount; // padding
float32Data[padding * index + 4] = element.diffuseColor[0];
float32Data[padding * index + 5] = element.diffuseColor[1];
float32Data[padding * index + 6] = element.diffuseColor[2]; // padding
float32Data[padding * index + 8] = element.emission[0];
float32Data[padding * index + 9] = element.emission[1];
float32Data[padding * index + 10] = element.emission[2];
}
return buffer;
}
}]);
function Mesh(name, vertices, indices) {
_classCallCheck(this, Mesh);
this.name = name;
this.vertices = vertices;
this.indices = indices;
this.diffuseColor = vec3.fromValues(0.4, 0.4, 0.4);
this.emission = vec3.fromValues(0.0, 0.0, 0.0);
this.offset = 0;
this.verticeCount = 0;
this.triangleCount = 0;
this.verticeCount = this.vertices.length / 3;
this.triangleCount = this.indices.length / 3;
}
return Mesh;
}();
Mesh.Padding = 48;
//# sourceMappingURL=Mesh.js.map