@antv/g-webgpu-raytracer
Version:
A simple ray tracer implemented with WebGPU
78 lines (65 loc) • 2.56 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Mesh = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _glMatrix = require("gl-matrix");
var Mesh = /*#__PURE__*/function () {
(0, _createClass2.default)(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) {
(0, _classCallCheck2.default)(this, Mesh);
this.name = name;
this.vertices = vertices;
this.indices = indices;
this.diffuseColor = _glMatrix.vec3.fromValues(0.4, 0.4, 0.4);
this.emission = _glMatrix.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;
}();
exports.Mesh = Mesh;
Mesh.Padding = 48;
//# sourceMappingURL=Mesh.js.map
;