From bd57f345ed9dbed1d81683e48199626de2ea9044 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Fri, 27 Jun 2025 10:18:39 -0700 Subject: Restructure project --- contrib/cgltf-tangents/cgltf_tangents.h | 67 +++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 contrib/cgltf-tangents/cgltf_tangents.h (limited to 'contrib/cgltf-tangents/cgltf_tangents.h') diff --git a/contrib/cgltf-tangents/cgltf_tangents.h b/contrib/cgltf-tangents/cgltf_tangents.h new file mode 100644 index 0000000..79e3502 --- /dev/null +++ b/contrib/cgltf-tangents/cgltf_tangents.h @@ -0,0 +1,67 @@ +/* +Copyright 2022 Marc Sunet + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#ifndef CGLTF_TANGENTS_H_INCLUDED__ +#define CGLTF_TANGENTS_H_INCLUDED__ + +#include + +/// A buffer that holds tangent vectors. +/// +/// Tangent vectors are tightly packed in the array. +/// +/// Tangent vectors have 4 coordinates: (X,Y,Z) for the vector, W for the sign. +/// The usual rules of MikkTSpace apply, namely that the bitangent should be +/// computed as: +/// +/// bitangent = tangent.w * cross(normal, tangent.xyz); +/// +/// Refer to the MikkTSpace documentation for more details. +/// +/// The primitive pointer points to the mesh primitive for which the tangents in +/// this buffer were computed. When your application loads mesh primitives, it +/// can scan the cgltfTangetBuffer array outputed by cgltf_compute_tangents() to +/// see whether tangents were computed for the mesh primitive. +typedef struct cgltfTangentBuffer { + void* data; // X-coordinate of the first tangent vector. + cgltf_size size_bytes; // Total Size of data in bytes. + cgltf_primitive* primitive; // The primitive these tangents belong to. +} cgltfTangentBuffer; + +/// Compute tangent vectors for normal-mapped mesh primitives missing them. +/// +/// cgltf_options can be zeroed out but must be non-null. +/// +/// cgltf_data is the scene previously loaded by cgltf. +/// +/// out_tangent_buffers is an output array of tangent buffers, one buffer per +/// mesh primitive for which tangents were computed. +/// +/// out_num_tangent_buffers is the number of tangent buffers in the output +/// array. +cgltf_result cgltf_compute_tangents(const cgltf_options*, const cgltf_data*, + cgltfTangentBuffer** out_tangent_buffers, + cgltf_size* out_num_tangent_buffers); + +#endif // CGLTF_TANGENTS_H_INCLUDED__ -- cgit v1.2.3