The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

u/mask: Introduce u_visibility_mask

authored by

Simon Zeni and committed by
Jakob Bornecrantz
1ec26ded 69afb627

+123
+2
src/xrt/auxiliary/util/CMakeLists.txt
··· 96 96 u_config_json.c 97 97 u_config_json.h 98 98 u_verify.h 99 + u_visibility_mask.c 100 + u_visibility_mask.h 99 101 u_win32_com_guard.cpp 100 102 u_win32_com_guard.hpp 101 103 u_worker.c
+91
src/xrt/auxiliary/util/u_visibility_mask.c
··· 1 + // Copyright 2023, Collabora, Ltd. 2 + // SPDX-License-Identifier: BSL-1.0 3 + /*! 4 + * @file 5 + * @brief Visibility mask utilitary 6 + * @author Simon Zeni <simon.zeni@collabora.com> 7 + * @ingroup aux_util 8 + */ 9 + 10 + #include "u_misc.h" 11 + #include "u_visibility_mask.h" 12 + #include "u_logging.h" 13 + 14 + #include <string.h> 15 + 16 + static const struct xrt_vec2 vertices_hidden[] = { 17 + {1.0, 0.75}, {1.0, 1.0}, {0.75, 1.0}, {-1.0, 1.0}, {-1.0, 0.75}, {-0.75, 1.0}, 18 + {-1.0, -0.75}, {-1.0, -1.0}, {-0.75, -1.0}, {0.75, -1.0}, {1.0, -1.0}, {1.0, -0.75}, 19 + }; 20 + 21 + static const uint32_t indices_hidden[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; 22 + 23 + static const struct xrt_vec2 vertices_visible[] = { 24 + {1.f, -.75f}, {.75f, -1.f}, {-.75f, -1.f}, {-1.f, -.75f}, {-1.f, .75f}, 25 + {-.75f, 1.f}, {.75f, 1.f}, {1.f, .75f}, {0.f, 0.f}, 26 + }; 27 + 28 + static const uint32_t indices_visible[] = { 29 + 8, 2, 1, 3, 2, 8, 8, 1, 0, 6, 8, 7, 4, 8, 5, 8, 0, 7, 5, 8, 6, 4, 3, 8, 30 + }; 31 + 32 + static const struct xrt_vec2 vertices_line[] = { 33 + {-.75f, -1.f}, {.75f, -1.f}, {1.f, -.75f}, {1.f, .75f}, {.75f, 1.f}, {-.75f, 1.f}, {-1.f, .75f}, {-1.f, -.75f}, 34 + }; 35 + 36 + static const uint32_t indices_line[] = {0, 1, 2, 3, 4, 5, 6, 7}; 37 + 38 + void 39 + u_visibility_mask_get_default(enum xrt_visibility_mask_type type, struct xrt_visibility_mask **out_mask) 40 + { 41 + uint32_t nvertices, nindices; 42 + 43 + switch (type) { 44 + case XRT_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH: 45 + nvertices = ARRAY_SIZE(vertices_hidden); 46 + nindices = ARRAY_SIZE(indices_hidden); 47 + break; 48 + case XRT_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH: 49 + nvertices = ARRAY_SIZE(vertices_visible); 50 + nindices = ARRAY_SIZE(indices_visible); 51 + break; 52 + case XRT_VISIBILITY_MASK_TYPE_LINE_LOOP: 53 + nvertices = ARRAY_SIZE(vertices_line); 54 + nindices = ARRAY_SIZE(indices_line); 55 + break; 56 + } 57 + 58 + const size_t size = 59 + sizeof(struct xrt_visibility_mask) + sizeof(uint32_t) * nindices + sizeof(struct xrt_vec2) * nvertices; 60 + *out_mask = U_CALLOC_WITH_CAST(struct xrt_visibility_mask, size); 61 + if (*out_mask == NULL) { 62 + U_LOG_E("failed to allocate out xrt_visibility_mask"); 63 + return; 64 + } 65 + 66 + struct xrt_visibility_mask *mask = *out_mask; 67 + 68 + mask->index_count = nindices; 69 + mask->vertex_count = nvertices; 70 + 71 + const struct xrt_vec2 *vertices; 72 + const uint32_t *indices; 73 + 74 + switch (type) { 75 + case XRT_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH: 76 + vertices = vertices_hidden; 77 + indices = indices_hidden; 78 + break; 79 + case XRT_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH: 80 + vertices = vertices_visible; 81 + indices = indices_visible; 82 + break; 83 + case XRT_VISIBILITY_MASK_TYPE_LINE_LOOP: 84 + vertices = vertices_line; 85 + indices = indices_line; 86 + break; 87 + } 88 + 89 + memcpy(xrt_visibility_mask_get_indices(mask), indices, sizeof(uint32_t) * nindices); 90 + memcpy(xrt_visibility_mask_get_vertices(mask), vertices, sizeof(struct xrt_vec2) * nvertices); 91 + }
+30
src/xrt/auxiliary/util/u_visibility_mask.h
··· 1 + // Copyright 2023, Collabora, Ltd. 2 + // SPDX-License-Identifier: BSL-1.0 3 + /*! 4 + * @file 5 + * @brief Visibility mask utilitary header 6 + * @author Simon Zeni <simon.zeni@collabora.com> 7 + * @ingroup aux_util 8 + */ 9 + 10 + #include "xrt/xrt_defines.h" 11 + #include "xrt/xrt_visibility_mask.h" 12 + 13 + 14 + #ifdef __cplusplus 15 + extern "C" { 16 + #endif 17 + 18 + 19 + /*! 20 + * Default visibility mask. The caller must take care of de-allocating the mask once done with it. 21 + * 22 + * @ingroup aux_util 23 + */ 24 + void 25 + u_visibility_mask_get_default(enum xrt_visibility_mask_type type, struct xrt_visibility_mask **out_mask); 26 + 27 + 28 + #ifdef __cplusplus 29 + } 30 + #endif