UNPKG

@antv/g-webgpu-raytracer

Version:

A simple ray tracer implemented with WebGPU

65 lines (58 loc) 2.24 kB
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