2#include <score_plugin_gfx_export.h>
3#include <ossia/dataflow/geometry_port.hpp>
35 float projection[16]{};
36 float viewProjection[16]{};
37 float cameraPosition[4]{};
40 int32_t materialCount{};
42 float ambientColor[4]{0.03f, 0.03f, 0.03f, 1.f};
49 float modelViewProjection[16]{};
50 float normalMatrix[12]{};
51 int32_t materialIndex{};
62inline constexpr uint32_t tex_ref_none() {
return 0xFFFFFFFFu; }
63inline constexpr uint32_t tex_ref_static(uint32_t bucket, uint32_t layer)
70 return (1u << 30) | ((bucket & 0x7Fu) << 23) | (layer & 0x007FFFFFu);
77inline constexpr uint32_t tex_ref_dynamic(uint32_t slot)
79 return (2u << 30) | (slot & 0x00FFFFFFu);
87 float baseColor[4]{1.f, 1.f, 1.f, 1.f};
89 float metallicRoughnessOcclusionUnlit[4]{0.f, 0.5f, 1.f, 0.f};
91 float emissive_strength[4]{0.f, 0.f, 0.f, 1.f};
94 uint32_t textureRefs[4]{
95 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu};
133 uint32_t feature_mask{0u};
139 uint32_t hit_group_id{0u};
147 uint32_t occlusion_textureRef{0xFFFFFFFFu};
152 float alpha_cutoff{0.5f};
154static_assert(
sizeof(
MaterialGPU) == 80,
"MaterialGPU layout must match shader");
159namespace material_feature
161inline constexpr uint32_t has_base_color_texture = 1u << 0;
162inline constexpr uint32_t has_metal_rough_texture = 1u << 1;
163inline constexpr uint32_t has_normal_texture = 1u << 2;
164inline constexpr uint32_t has_emissive_texture = 1u << 3;
165inline constexpr uint32_t unlit = 1u << 4;
166inline constexpr uint32_t alpha_non_opaque = 1u << 5;
167inline constexpr uint32_t has_clearcoat = 1u << 6;
168inline constexpr uint32_t has_sheen = 1u << 7;
169inline constexpr uint32_t has_transmission = 1u << 8;
170inline constexpr uint32_t has_volume = 1u << 9;
171inline constexpr uint32_t has_specular = 1u << 10;
172inline constexpr uint32_t has_iridescence = 1u << 11;
173inline constexpr uint32_t has_anisotropy = 1u << 12;
174inline constexpr uint32_t has_diffuse_transmission = 1u << 13;
175inline constexpr uint32_t has_subsurface = 1u << 14;
176inline constexpr uint32_t thin_walled = 1u << 15;
180inline constexpr uint32_t alpha_mask = 1u << 16;
181inline constexpr uint32_t alpha_blend = 1u << 17;
186inline constexpr uint32_t double_sided = 1u << 18;
189inline constexpr uint32_t has_separate_occlusion = 1u << 19;
194inline constexpr uint32_t shadow_caster_disabled = 1u << 30;
195inline constexpr uint32_t reflection_caster_disabled = 1u << 31;
214 float coat[4]{0.f, 0.f, 1.5f, 0.f};
216 float coat_anisotropy[4]{0.f, 1.f, 0.f, 0.f};
220 float fuzz_color[4]{0.f, 0.f, 0.f, 0.f};
225 float transmission[4]{0.f, 0.f, 0.f, 20.f};
227 float transmission_color[4]{1.f, 1.f, 1.f, 0.f};
229 float transmission_scatter[4]{0.f, 0.f, 0.f, 0.f};
233 float specular_weight_color[4]{1.f, 1.f, 1.f, 1.f};
236 float specular_ior_anisotropy[4]{1.5f, 0.f, 1.f, 0.f};
242 float thin_film[4]{0.f, 400.f, 1.3f, 0.f};
246 float diffuse_transmission[4]{0.f, 1.f, 1.f, 1.f};
250 float subsurface_weight_color[4]{0.f, 0.8f, 0.8f, 0.8f};
252 float subsurface_radius_scale[4]{1.f, 1.f, 0.5f, 0.25f};
258 float flags[4]{0.f, 0.f, 0.f, 0.f};
278 uint32_t textureRefs[16]{
279 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,
280 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,
281 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,
282 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu};
296 float eye[4]{0.f, 0.f, 3.f, 0.f};
297 float target[4]{0.f, 0.f, 0.f, 0.f};
298 float up[4]{0.f, 1.f, 0.f, 0.f};
299 float yfov{60.f * 3.14159265f / 180.f};
302 uint32_t projection{0};
311 float color[4]{1.f, 1.f, 1.f, 1.f};
312 float local_direction[4]{0.f, 0.f, -1.f, 0.f};
324 0.f, 1.f, 0.7071f, 0.005f};
332 uint32_t shadow_enabled{0};
333 uint32_t decay_mode{2};
338 uint32_t transform_slot{0};
343 float normal_bias{0.01f};
345static_assert(
sizeof(
RawLightData) == 64,
"RawLightData must stay 64 B");
353 float translation[4]{0.f, 0.f, 0.f, 0.f};
354 float rotation[4]{0.f, 0.f, 0.f, 1.f};
355 float scale[4]{1.f, 1.f, 1.f, 0.f};
366 float ambient[4]{0.03f, 0.03f, 0.03f, 1.f};
367 float fog_color_density[4]{0.8f, 0.8f, 0.8f, 0.f};
368 float fog_range[4]{10.f, 100.f, 0.f, 0.f};
370 float exposure_gamma[4]{1.f, 2.2f, 0.f, 0.f};
381 float m[16]{1.f, 0.f, 0.f, 0.f,
400 float light_view_proj[8][16]{};
403 float cascade_split_distances[8]{};
404 uint32_t cascade_count{0};
410 "ShadowCascadesUBO size = mat4[8] (512) + float[8] (32) + 4×uint (16) = 560 B");
420 const ossia::geometry* mesh{};
421 ossia::geometry_spec geometry_ref;
422 std::shared_ptr<ossia::geometry> owned_mesh;
429 uint64_t stable_id{};
431 QMatrix4x4 worldTransform;
436 ossia::material_component_ptr material;
443 ossia::skeleton_component_ptr skin;
449 int materialIndex{-1};
459 ossia::aabb local_bounds{};
465 std::uint32_t transform_slot{0xFFFFFFFFu};
472 std::vector<QMatrix4x4> joint_matrices;
486 uint32_t transform_slot;
491 std::vector<DrawCall> draws;
495 std::vector<uint32_t> lightArenaSlots;
496 std::vector<MaterialGPU> materials;
500 std::vector<MaterialExtensionsGPU> material_extensions;
501 std::vector<SkeletonGPU> skins;
507 std::vector<WorldTransformEmit> worldTransforms;
512 std::vector<ossia::scene_data_ptr> scene_data;
519 ossia::instance_component_ptr instance;
520 QMatrix4x4 worldTransform;
522 std::vector<InstanceDraw> instances;
530 ossia::primitive_cloud_component_ptr cloud;
531 QMatrix4x4 worldTransform;
534 uint32_t transform_slot{0xFFFFFFFFu};
536 std::vector<PrimitiveCloudDraw> primitive_clouds;
544 ossia::camera_component_ptr component;
545 QMatrix4x4 worldTransform;
546 ossia::scene_node_id node_id{};
548 std::vector<CameraEntry> cameras;
554 int activeCameraIndex{-1};
561 QMatrix4x4 viewMatrix;
562 QMatrix4x4 projectionMatrix;
563 QVector3D cameraPosition;
564 float cameraFov{60.f};
565 float cameraNear{0.1f};
566 float cameraFar{1000.f};
568 bool hasCamera{
false};
573 lightArenaSlots.clear();
575 material_extensions.clear();
579 primitive_clouds.clear();
581 worldTransforms.clear();
582 activeCameraIndex = -1;
587 viewMatrix.setToIdentity();
588 projectionMatrix.setToIdentity();
597SCORE_PLUGIN_GFX_EXPORT
599 const ossia::scene_spec& scene,
606SCORE_PLUGIN_GFX_EXPORT
607std::shared_ptr<ossia::geometry>
608primitiveToGeometry(
const ossia::mesh_primitive& prim);
610SCORE_PLUGIN_GFX_EXPORT
611MaterialGPU packMaterial(
const ossia::material_component& mc);
612MaterialExtensionsGPU packMaterialExtensions(
const ossia::material_component& mc);
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:11
Definition SceneGPUState.hpp:416
Definition SceneGPUState.hpp:365
Definition SceneGPUState.hpp:543
Definition SceneGPUState.hpp:518
Definition SceneGPUState.hpp:529
Definition SceneGPUState.hpp:490
Definition SceneGPUState.hpp:211
Definition SceneGPUState.hpp:86
Definition SceneGPUState.hpp:47
Definition SceneGPUState.hpp:295
Definition SceneGPUState.hpp:310
Definition SceneGPUState.hpp:33
Definition SceneGPUState.hpp:399
Definition SceneGPUState.hpp:471