2#include <score_plugin_gfx_export.h>
3#include <ossia/dataflow/geometry_port.hpp>
12class GpuResourceRegistry;
36 float projection[16]{};
37 float viewProjection[16]{};
38 float cameraPosition[4]{};
41 int32_t materialCount{};
43 float ambientColor[4]{0.03f, 0.03f, 0.03f, 1.f};
50 float modelViewProjection[16]{};
51 float normalMatrix[12]{};
52 int32_t materialIndex{};
63inline constexpr uint32_t tex_ref_none() {
return 0xFFFFFFFFu; }
64inline constexpr uint32_t tex_ref_static(uint32_t bucket, uint32_t layer)
71 return (1u << 30) | ((bucket & 0x7Fu) << 23) | (layer & 0x007FFFFFu);
78inline constexpr uint32_t tex_ref_dynamic(uint32_t slot)
80 return (2u << 30) | (slot & 0x00FFFFFFu);
88 float baseColor[4]{1.f, 1.f, 1.f, 1.f};
90 float metallicRoughnessOcclusionUnlit[4]{0.f, 0.5f, 1.f, 0.f};
92 float emissive_strength[4]{0.f, 0.f, 0.f, 1.f};
95 uint32_t textureRefs[4]{
96 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu};
134 uint32_t feature_mask{0u};
140 uint32_t hit_group_id{0u};
148 uint32_t occlusion_textureRef{0xFFFFFFFFu};
153 float alpha_cutoff{0.5f};
155static_assert(
sizeof(
MaterialGPU) == 80,
"MaterialGPU layout must match shader");
160namespace material_feature
162inline constexpr uint32_t has_base_color_texture = 1u << 0;
163inline constexpr uint32_t has_metal_rough_texture = 1u << 1;
164inline constexpr uint32_t has_normal_texture = 1u << 2;
165inline constexpr uint32_t has_emissive_texture = 1u << 3;
166inline constexpr uint32_t unlit = 1u << 4;
167inline constexpr uint32_t alpha_non_opaque = 1u << 5;
168inline constexpr uint32_t has_clearcoat = 1u << 6;
169inline constexpr uint32_t has_sheen = 1u << 7;
170inline constexpr uint32_t has_transmission = 1u << 8;
171inline constexpr uint32_t has_volume = 1u << 9;
172inline constexpr uint32_t has_specular = 1u << 10;
173inline constexpr uint32_t has_iridescence = 1u << 11;
174inline constexpr uint32_t has_anisotropy = 1u << 12;
175inline constexpr uint32_t has_diffuse_transmission = 1u << 13;
176inline constexpr uint32_t has_subsurface = 1u << 14;
177inline constexpr uint32_t thin_walled = 1u << 15;
181inline constexpr uint32_t alpha_mask = 1u << 16;
182inline constexpr uint32_t alpha_blend = 1u << 17;
187inline constexpr uint32_t double_sided = 1u << 18;
190inline constexpr uint32_t has_separate_occlusion = 1u << 19;
195inline constexpr uint32_t shadow_caster_disabled = 1u << 30;
196inline constexpr uint32_t reflection_caster_disabled = 1u << 31;
215 float coat[4]{0.f, 0.f, 1.5f, 0.f};
218 float coat_anisotropy[4]{0.f, 1.f, 0.f, 1.f};
222 float fuzz_color[4]{0.f, 0.f, 0.f, 0.f};
227 float transmission[4]{0.f, 0.f, 0.f, 20.f};
229 float transmission_color[4]{1.f, 1.f, 1.f, 0.f};
231 float transmission_scatter[4]{0.f, 0.f, 0.f, 0.f};
235 float specular_weight_color[4]{1.f, 1.f, 1.f, 1.f};
238 float specular_ior_anisotropy[4]{1.5f, 0.f, 1.f, 0.f};
244 float thin_film[4]{0.f, 400.f, 1.3f, 0.f};
248 float diffuse_transmission[4]{0.f, 1.f, 1.f, 1.f};
252 float subsurface_weight_color[4]{0.f, 0.8f, 0.8f, 0.8f};
254 float subsurface_radius_scale[4]{1.f, 1.f, 0.5f, 0.25f};
260 float flags[4]{0.f, 0.f, 0.f, 0.f};
280 uint32_t textureRefs[16]{
281 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,
282 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,
283 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu,
284 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu};
298 float eye[4]{0.f, 0.f, 3.f, 0.f};
299 float target[4]{0.f, 0.f, 0.f, 0.f};
300 float up[4]{0.f, 1.f, 0.f, 0.f};
301 float yfov{60.f * 3.14159265f / 180.f};
304 uint32_t projection{0};
313 float color[4]{1.f, 1.f, 1.f, 1.f};
314 float local_direction[4]{0.f, 0.f, -1.f, 0.f};
326 0.f, 1.f, 0.7071f, 0.005f};
334 uint32_t shadow_enabled{0};
335 uint32_t decay_mode{2};
340 uint32_t transform_slot{0};
345 float normal_bias{0.01f};
347static_assert(
sizeof(
RawLightData) == 64,
"RawLightData must stay 64 B");
355 float translation[4]{0.f, 0.f, 0.f, 0.f};
356 float rotation[4]{0.f, 0.f, 0.f, 1.f};
357 float scale[4]{1.f, 1.f, 1.f, 0.f};
368 float ambient[4]{0.f, 0.f, 0.f, 1.f};
369 float fog_color_density[4]{0.8f, 0.8f, 0.8f, 0.f};
370 float fog_range[4]{10.f, 100.f, 0.f, 0.f};
372 float exposure_gamma[4]{1.f, 2.2f, 0.f, 0.f};
383 float m[16]{1.f, 0.f, 0.f, 0.f,
404 float light_view_proj[8][16]{};
407 float cascade_split_distances[8]{};
408 uint32_t cascade_count{0};
409 uint32_t light_slot{0xFFFFFFFFu};
414 "ShadowCascadesUBO size = mat4[8] (512) + float[8] (32) + 4×uint (16) = 560 B");
424 const ossia::geometry* mesh{};
425 ossia::geometry_spec geometry_ref;
426 std::shared_ptr<ossia::geometry> owned_mesh;
433 uint64_t stable_id{};
435 QMatrix4x4 worldTransform;
440 ossia::material_component_ptr material;
447 ossia::skeleton_component_ptr skin;
453 int materialIndex{-1};
463 ossia::aabb local_bounds{};
469 std::uint32_t transform_slot{0xFFFFFFFFu};
476 std::vector<QMatrix4x4> joint_matrices;
490 uint32_t transform_slot;
495 std::vector<DrawCall> draws;
500 std::vector<uint32_t> lightArenaSlots;
508 ossia::light_component_ptr light;
509 QMatrix4x4 worldTransform;
512 std::vector<LoaderLight> loaderLights;
513 std::vector<MaterialGPU> materials;
517 std::vector<MaterialExtensionsGPU> material_extensions;
520 std::vector<SkeletonGPU> skins;
526 std::vector<WorldTransformEmit> worldTransforms;
531 std::vector<ossia::scene_data_ptr> scene_data;
538 ossia::instance_component_ptr instance;
539 QMatrix4x4 worldTransform;
541 std::vector<InstanceDraw> instances;
549 ossia::primitive_cloud_component_ptr cloud;
550 QMatrix4x4 worldTransform;
553 uint32_t transform_slot{0xFFFFFFFFu};
555 std::vector<PrimitiveCloudDraw> primitive_clouds;
563 ossia::camera_component_ptr component;
564 QMatrix4x4 worldTransform;
565 ossia::scene_node_id node_id{};
567 std::vector<CameraEntry> cameras;
573 int activeCameraIndex{-1};
580 QMatrix4x4 viewMatrix;
581 QMatrix4x4 projectionMatrix;
582 QVector3D cameraPosition;
583 float cameraFov{60.f};
584 float cameraNear{0.1f};
585 float cameraFar{1000.f};
587 bool hasCamera{
false};
592 lightArenaSlots.clear();
593 loaderLights.clear();
595 material_extensions.clear();
599 primitive_clouds.clear();
601 worldTransforms.clear();
602 activeCameraIndex = -1;
607 viewMatrix.setToIdentity();
608 projectionMatrix.setToIdentity();
619SCORE_PLUGIN_GFX_EXPORT
621 const ossia::scene_spec& scene,
624 const GpuResourceRegistry* registry =
nullptr);
629SCORE_PLUGIN_GFX_EXPORT
630std::shared_ptr<ossia::geometry>
631primitiveToGeometry(
const ossia::mesh_primitive& prim);
633SCORE_PLUGIN_GFX_EXPORT
634MaterialGPU packMaterial(
const ossia::material_component& mc);
635MaterialExtensionsGPU packMaterialExtensions(
const ossia::material_component& mc);
Graphics rendering pipeline for ossia score.
Definition Filter/PreviewWidget.hpp:11
Definition SceneGPUState.hpp:420
Definition SceneGPUState.hpp:367
Definition SceneGPUState.hpp:562
Definition SceneGPUState.hpp:537
Definition SceneGPUState.hpp:507
Definition SceneGPUState.hpp:548
Definition SceneGPUState.hpp:494
Definition SceneGPUState.hpp:212
Definition SceneGPUState.hpp:87
Definition SceneGPUState.hpp:48
Definition SceneGPUState.hpp:297
Definition SceneGPUState.hpp:312
Definition SceneGPUState.hpp:34
Definition SceneGPUState.hpp:403
Definition SceneGPUState.hpp:475